2

当使用用户“LocalService”将 Java 应用程序作为服务运行时,临时目录(“java.io.tmpdir”)指向“c:/windows/temp”(例如)。

运行 Java 应用程序通常会给出“c:/documents and settings/user/local settings/temp”。

当我的应用程序正常运行时,如何确定与用户无关的临时文件夹“c:/windows/temp”?

谢谢和问候, GHad

4

4 回答 4

1

我不确定是否有一种“干净”的方式来做到这一点。

在这种情况下,我可能会专门为 Java 应用程序创建一个目录并在属性文件中引用它。

于 2009-11-10T10:50:53.410 回答
1

你可以:

  • 正如 St Shadow 所建议的,依赖一些环境变量,例如 %WINDIR% 或 %SYSTEMROOT%,在末尾附加“\temp”,然后使用它。
  • 或使用 JVM 的命令行参数将此值作为变量传递给您的应用程序,例如

    -Dmytempdir=%WINDIR%\temp

正如您所提到的,用户可以使用 System -> Environment Variables 更改这些变量中的任何一个的值,但我认为它们在重新启动之前不会对系统产生任何影响(...?)。

或者...

  • 尝试使用一些令人讨厌的 java.util.prefs.Preferences 或其他东西从注册表中读取值——在我的机器上,看起来你所追求的值被保存在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP.

这可能会很混乱,我不知道 Preferences 类是否会让您访问您需要阅读的密钥。同样,如果用户真的想要更改注册表值,您也无能为力,但我再次怀疑它会在重新启动之前产生任何影响,并且可能不仅仅影响您的应用程序。

干杯,--J

于 2009-11-10T14:08:43.660 回答
0

Java 系统属性 java.io.tmpdir 只是指向系统变量 %TMP%。对于普通用户,%TMP% 指向 %HOMEPATH%\temp,对于其他帐户 - 可以是另一个路径。您可以尝试使用 %SYSTEMROOT%\temp 代替 java.io.tmpdir - %SYSTEMROOT% 指向安装 Windows 的目录。

于 2009-11-10T10:50:03.037 回答
0

您可以简单地创建自己的临时文件夹,添加使用deleteOnExit()方法以确保在您的应用程序退出时删除此文件夹。

于 2009-11-10T11:19:29.343 回答