Найти независимый от пользователя каталог TEMP с Java - PullRequest
2 голосов
/ 10 ноября 2009

при запуске приложения Java в качестве службы с пользователем LocalService временный каталог ("java.io.tmpdir") указывает на "c: / windows / temp" (например).

При запуске приложения Java вместо этого выдается 'c: / documents and settings / user / local settings / temp'.

Как я могу определить независимую от пользователя временную папку 'c: / windows / temp', когда мое приложение работает нормально?

Спасибо и привет, GHAD

Ответы [ 4 ]

1 голос
/ 10 ноября 2009

Вы могли бы:

  • как предложено St Shadow, положитесь на некоторую переменную окружения, такую ​​как% WINDIR% или% SYSTEMROOT%, добавьте "\ temp" в конце и используйте это.
  • или передайте это значение вашему приложению в качестве переменной, используя аргумент командной строки для JVM, например,

    -Dmytempdir=%WINDIR%\temp

Как вы упоминаете, пользователь может изменить значения любого из этих переменные, использующие System -> Переменные среды, но я не думаю, что они будут иметь какое-либо влияние на систему до перезагрузки в любом случае (...?).

Или ...

  • попробуйте прочитать значение из реестра, используя какое-то грязное использование java.util.prefs.Preferences или что-то в этом духе. На моей машине это выглядит так, как будто значение, которое вы ищете, содержится в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP.

Скорее всего, это будет довольно грязно, и я не знаю, даст ли класс Preferences доступ к ключу, который вам нужно прочитать. Опять же, вы мало что можете сделать, чтобы пользователь изменил значение реестра, если бы он действительно этого хотел, но опять же я сомневаюсь, что это повлияет до перезагрузки и, вероятно, повлияет не только на ваше приложение.

Cheers, --J

1 голос
/ 10 ноября 2009

Я не уверен, что есть «чистый» способ сделать это.

В этой ситуации я бы, вероятно, создал каталог специально для приложения Java и обратился к нему в файле свойств.

0 голосов
/ 10 ноября 2009

Вы можете просто создать собственную временную папку, добавив метод deleteOnExit () , чтобы эта папка была удалена при выходе из приложения.

0 голосов
/ 10 ноября 2009

Системное свойство Java java.io.tmpdir просто указывает на системную переменную% TMP%. Для обычного пользователя% TMP% указывает на% HOMEPATH% \ temp, для другой учетной записи - может быть другой путь. Вы можете попробовать использовать% SYSTEMROOT% \ temp вместо java.io.tmpdir -% SYSTEMROOT% указывает на каталог, в котором установлены окна.

...