Mam aplikację Java w linii poleceń, która czyta i zapisuje pliki na platformie Windows 7 x64. Aktualnie działa aplikacja z dostarczonym IBM Java SE 6. Struktura w następujący sposób:Java SE 6 i Java SE 8 JRE zachowują się inaczej w systemie Windows 7 (uprawnienia do plików)
APP_ROOT
some_folder
jre
bin
lib
myjarfile.jar
appl_start.bat
Teraz zastąpił folderu jre z rozpakowanym JRE 8 opakowania. Aplikacja zaczęła narzekać, że nie może uzyskać dostępu do plików (w rzeczywistości jest to operacja zapisu) w folderze some_folder. Jeśli utworzę ręcznie nowy some_folder_1 pod APP_ROOT i ponownie skonfiguruję aplikację, aby z niego korzystać - aplikacja działa dobrze. Jeśli usunę nowo utworzony some_folder_1 i zmieni nazwę some_folder na some_folder_1 - aplikacja narzeka, że nie może uzyskać do niej dostępu (nawet w trybie odczytu).
Po zamianie folderu jre na pliki JRE 6 - aplikacja zacznie działać poprawnie.
Próbowano porównywać efektywne uprawnienia za pośrednictwem właściwości - wszystko wygląda tak samo, nic podejrzanego. Kontrola konta użytkownika jest włączona, pracuję i zastępuję foldery zwykłym użytkownikiem.
UPDATE: Po wyłączeniu UAC w Windows 7 i ponownym uruchomieniu aplikacji rozpoczął pracę w porządku z JRE 8. Ale muszę zrobić to praca z UAC włączony. Po przywróceniu UAC do włączenia i ponownego uruchomienia - aplikacja z JRE 8 znowu się nie powiodła. Zauważyliśmy również, że JRE 8 nie tworzy poprawnie plików w "C: \ Users \ nazwa_użytkownika \ AppData \ Local \ VirtualStore \ Program Files (x86) \", gdzie zwykle tworzy się, gdy program próbuje pisać w Program Files.
UPDATE 2: Czy bardziej rozwiązywania problemów i zawężony problemu:
- Aplikacja z JRE 8 nie powiedzie się tylko wtedy, gdy pisze do "C: \ Program Files \ APP_ROOT \ some_folder"
- Dzięki Windows 7 projekt w tym przypadku powinien zostać utworzony w C: \ User .. \ VirtualStore, ale JRE 8 nie może tego zrobić (, co jest nie tak i źródłem problemu)
- JRE 6 może tworzyć pliki w porządku w VirtualStore .
- zawartość VirtualStore został oczyszczony przed ponownym uruchomieniu z JRE 8
- udało bieg z "some_folder_1" i JRE 8 kombinacja była ponieważ JRE 8 rzeczywiście napisał wewnątrz katalogu C: \ Program Files/APP_ROOT/some_folder_1 - co jest naruszeniem IMHO . Jest to więc kolejny problem - dlaczego JRE 8 nie przekierowywał zapisu do systemu plików w VirtualStore i zamiast tego zmodyfikował podfolder C: \ Program Files.
- Jeśli zdefiniuję% localusrdir% do jakiegoś katalogu C: \ temp, JRE 8 pokazuje ten sam problem, więc jest to nie tylko specyficzny problem z folderem VirtualStore, IMHO.
Tak, robię Wniosek - jakiegoś powodu JRE 8 nie może przekierować wyjście pisanie do katalogu C: \ Program Files ... do C: \ Users \ ... VirtualStore
Jak to możliwe być naprawione, więc JRE 8 zaczyna pisać w VirtualStore dobrze jak JRE 6?
UPDATE 3: zepsuty wersja JRE:
C:\Program Files (x86)\APP\jre\bin>java.exe -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build pwi3280-20150129_02)
IBM J9 VM (build 2.8, JRE 1.8.0 Windows 7 x86-32 20150116_231420 (JIT enabled, AOT enabled)
J9VM - R28_Java8_GA_20150116_2030_B231420
JIT - tr.r14.java_20150109_82886.02
GC - R28_Java8_GA_20150116_2030_B231420
J9CL - 20150116_231420)
JCL - 20150123_01 based on Oracle jdk8u31-b12
Tak, dokładnie - programy operacyjne mogą albo naprawić swoje oprogramowanie, albo kontynuować korzystanie z Java 6. (Sugerowałbym usunięcie części o bezpośrednim użyciu ścieżki VirtualStore, ponieważ jaka ścieżka może być zależna od wersji systemu Windows, być może nawet w wersji językowej.) –
Keilaron, doceniam twoją odpowiedź, dwa punkty: 1) Jest to starsza aplikacja i nikt nie chce jej przepisać, ponieważ Java 8 zaczęła działać inaczej niż wcześniejsze JRE. 2) JRE 6 działa dobrze, więc informowanie go o poziomie systemu operacyjnego nie jest w pełni dokładne. –
@BaratSahdzijeu: nie jest problemem na poziomie systemu operacyjnego, jest to błąd w aplikacji, z którą system operacyjny działał przy użyciu poprawki zgodności. Jeśli nie masz ochoty naprawiać błędu, musisz po prostu trzymać się Java 6. (Cóż, przypuszczam, że IBM może dostarczyć ci plik wykonywalny pre-Vista, który implementuje środowisko wykonawcze Java 8, lub możesz być Ale naprawdę powinieneś naprawić błąd.) –