2012-01-11 34 views
6

Yazdığım bir Java masaüstü uygulamasına sahibim. Yürütme sırasında sistemde tanımlı varsayılan yol adında klasörler ve dosyalar oluşturuyorum.kullanıcı çalışma dizini: XP vs Vista

Java.io.files açıkça belirtmektedir: By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked.

ek olarak, kurulum ve kısayollar oluşturmayı etkinleştirmek için IzPack kullanıyorum.

Uygulamamı XP bilgisayarımda çalıştırdığımda, yüklemeden sonra bir masaüstü kısayolu alıyorum ve söz konusu dosya ve klasör oluşturma işlemi, Jar'ın Jar'ı yüklediği konumda. beklenen davranış.

Ama bunu bir Vista makinesinde test ettiğimde, klasörler ve dosyalar masaüstünde oluşturuluyor! Jar doğru yerde olsa bile (c: \ program files .. etc).

Bu dosyaların, Jar'ın bulunduğu klasörde ve kesinlikle masaüstünde oluşturulmasını istiyorum.

Burada neler olup bittiğine dair herhangi bir fikir verebilir mi?

+2

Yazma Vista'daki c: \ program dosyalarının UAC rızasına ihtiyacı var, bu yüzden Sistem'in masaüstünü bir geri dönüş olarak kullandığını sanıyorum. –

+0

Geri dönüşü kontrol edebileceğimin bir yolu var mı? – uzil24

+0

Çekirdek uygulama kitaplıkları ve benzeri için varsayılan java uygulaması yüklemesini yine de% PROGRAMFILES% içinde ayarlayabilirsiniz. Ancak, ** kullanıcı/veri yapılandırmalarınızı ** herhangi bir Windows işletim sistemi altında% PROGRAMFILES% içinde herhangi bir yerde kaydetmek yerine, System.getProperty ("user.home") 'veya' System.getenv ("USERPROFILE") kullanma hakkında) java uygulamanızın içinde, kullanıcı/uygulamanın bir şeyi değiştirmesini kolaylaştıran özel bir klasörle? –

cevap

1

Çünkü Vista/Seven, Program Files klasörüne yazma için yönetim müdahalesini gerektirir, bu yüzden JVM bir sonraki yazılabilir konumu yedek olarak arar: Masaüstü (veya Kullanıcı Belgeleri dizini). Kullanıcı ana dizini, tüm işletim sistemlerinde birleşik bir şekilde kolayca belirleyebilirsiniz, ki bu da JVM'nin umarım - makul bir yer seçmesine izin vermekten daha iyidir. Bu yardım etmezse bu yana

, Windows üzerinde JVM için known bug olduğunu yedek Sistemi Çevre değişken kontrol etmektir doğru kullanıcı giriş klasörü işaret etmelidir KULLANICIPROFİLİ:

String userHome = System.getenv("USERPROFILE"); 
+0

'u görüyorum. Bunu dikkate almadım. Kullanıcı giriş dizini kullanmanın olası bir sorunu Kaldırma sorunudur. Bu durumda bu dosyaları nasıl silebilirim emin değilim. Bazı uygulamaların arkasındaki klasörleri terk etme eğiliminde olduğunu biliyorum. Ben hiç sevmedim. – uzil24

+1

Seçili klasörün geçici bir dosya oluşturmaya ve üst klasörün olmasını beklediğiniz gibi olup olmadığını denetlemeye ve başarısızlık durumunda başka bir konum seçip seçmediğine bakmak için seçili klasörün yazılabilir olup olmadığını kolayca kontrol edebilirsiniz. –

+0

Tamam, uygulamamı göreceli yol yerine "user.dir" kullanacak şekilde değiştirdim ve sonuç bir felaket. Masaüstü kısayolu ile klasörler masaüstünde oluşturulur. "tüm programlar" menüsü kısayolu ile klasörler c: \ doc ve \ user location ayarlarında oluşturulur. Ve jar'ı doğrudan c: \ program files \ app_name konumundan çalıştırdığınızda, olması gerektiği gibi çalışır. "user.home" kullanımı diğer taraftan her seferinde aynı sonuca sahiptir. Uygulamanın, kavanozun bulunduğu yerde nasıl çalışmasını sağlayabilirim? – uzil24