2012-01-11 22 views
6

Mam aplikację Java na komputery stacjonarne, którą napisałem. Podczas wykonywania tworzę foldery i pliki o domyślnej nazwie ścieżki zdefiniowanej w systemie.katalog roboczy użytkownika: XP vs Vista

Java.io.files wyraźnie stwierdza: 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.

Ponadto używam IzPack aby umożliwić tworzenie instalacji i skróty.

Kiedy uruchamiam swoją aplikację na moim komputerze XP, po instalacji otrzymuję skrót na pulpicie, a wspomniane pliki i foldery znajdują się w lokalizacji, w której Izpack zainstalował Jar. które jest oczekiwanym zachowaniem.

Ale kiedy testuję to na maszynie Vista, foldery i pliki są tworzone na pulpicie! mimo że Jar znajduje się we właściwej lokalizacji (c: \ program files .. itd.).

Chcę, aby te pliki zostały utworzone w tym samym folderze, w którym znajduje się Jar, a na pewno nie na pulpicie.

Czy ktoś może mi dać wgląd w to, co się tutaj dzieje?

+2

Pisania do c: \ pliki programu w systemie Vista wymagają zgody UAC, więc podejrzewam, że system korzysta z pulpitu jako awaryjnego. –

+0

Czy istnieje sposób, w jaki można kontrolować awarię? – uzil24

+0

Można nadal ustawić domyślną instalację aplikacji java w pliku% PROGRAMFILES% dla bibliotek podstawowych aplikacji i takich. Ale zamiast zapisywać twoje ** konfiguracje użytkownika/danych ** gdziekolwiek w% PROGRAMFILES% pod jakimkolwiek systemem operacyjnym Windows, jak używać 'System.getProperty (" user.home ")' lub 'System.getenv (" USERPROFILE ") 'ze specjalnym folderem wewnątrz twojej aplikacji java, który ułatwia użytkownikowi/aplikacji zmianę czegoś? –

Odpowiedz

1

To dlatego, że w Vista/Seven zapisywanie w folderze Program Files wymaga ingerencji administracyjnej, więc JVM szuka następnej zapisywalnej lokalizacji jako rezerwowego: Desktop (lub katalogu User Documents). Możesz łatwo określić katalog domowy użytkownika w ujednolicony sposób na wszystkich systemach operacyjnych, co jest o wiele lepsze niż pozwolenie JVM wybrać - mam nadzieję - rozsądną lokalizację.

Ponieważ jest to known bug dla JVM na Windows, jeśli to nie pomoże, awaryjna jest sprawdzenie zmienna środowiska systemu USERPROFILE który powinien wskazać w odpowiednim katalogu domowym użytkownika:

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

. Nie brałem tego pod uwagę. Jednym z możliwych problemów z korzystaniem z katalogu domowego użytkownika jest problem z odinstalowaniem. Nie jestem pewien, jak mogę usunąć te pliki w takim przypadku. Wiem, że niektóre aplikacje zwykle opuszczają foldery. Nigdy tego nie lubiłem. – uzil24

+1

Możesz łatwo sprawdzić, czy wybrany folder jest zapisywalny, próbując utworzyć plik tymczasowy i sprawdzając, czy jego folder nadrzędny jest tym, czego oczekujesz, iw przypadku niepowodzenia wybierz inną lokalizację. –

+0

ok, poprawiłem moją aplikację, aby używała "user.dir" zamiast względnej ścieżki, a wynikiem jest katastrofa. ze skrótem na pulpicie foldery są tworzone na pulpicie. ze skrótem menu "wszystkie programy" foldery są tworzone w lokalizacji c: \ doc i setting \ user. A podczas uruchamiania słoika bezpośrednio z lokalizacji c: \ program files \ app_name, działa tak, jak powinien. używanie "user.home" ma ten sam wynik za każdym razem z drugiej strony. jak mogę sprawić, aby aplikacja działała w miejscu, w którym znajduje się słoik? – uzil24

Powiązane problemy