当使用用户“LocalService”将 Java 应用程序作为服务运行时,临时目录(“java.io.tmpdir”)指向“c:/windows/temp”(例如)。
运行 Java 应用程序通常会给出“c:/documents and settings/user/local settings/temp”。
当我的应用程序正常运行时,如何确定与用户无关的临时文件夹“c:/windows/temp”?
谢谢和问候, GHad
当使用用户“LocalService”将 Java 应用程序作为服务运行时,临时目录(“java.io.tmpdir”)指向“c:/windows/temp”(例如)。
运行 Java 应用程序通常会给出“c:/documents and settings/user/local settings/temp”。
当我的应用程序正常运行时,如何确定与用户无关的临时文件夹“c:/windows/temp”?
谢谢和问候, GHad
我不确定是否有一种“干净”的方式来做到这一点。
在这种情况下,我可能会专门为 Java 应用程序创建一个目录并在属性文件中引用它。
你可以:
或使用 JVM 的命令行参数将此值作为变量传递给您的应用程序,例如
-Dmytempdir=%WINDIR%\temp
正如您所提到的,用户可以使用 System -> Environment Variables 更改这些变量中的任何一个的值,但我认为它们在重新启动之前不会对系统产生任何影响(...?)。
或者...
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\TEMP
.这可能会很混乱,我不知道 Preferences 类是否会让您访问您需要阅读的密钥。同样,如果用户真的想要更改注册表值,您也无能为力,但我再次怀疑它会在重新启动之前产生任何影响,并且可能不仅仅影响您的应用程序。
干杯,--J
Java 系统属性 java.io.tmpdir 只是指向系统变量 %TMP%。对于普通用户,%TMP% 指向 %HOMEPATH%\temp,对于其他帐户 - 可以是另一个路径。您可以尝试使用 %SYSTEMROOT%\temp 代替 java.io.tmpdir - %SYSTEMROOT% 指向安装 Windows 的目录。
您可以简单地创建自己的临时文件夹,添加使用deleteOnExit()方法以确保在您的应用程序退出时删除此文件夹。