我写了一个Java应用程序,然后用NSIS(或NSYS ...)安装程序打包它。我工作干净但有时我发现对于在Windows 7上运行的一些用户来说,应用程序根本无法在磁盘上写入(它甚至无法写入日志)。该应用程序安装在c:\ Programs(或d或e ...)上。来自支持的人说他们通过在c:\中安装来解决它。为什么会这样?它与Java安全性有关吗?也许在我的Windows安装和其他人我没有注意到它因为我关闭了无人机。
想法?
答案 0 :(得分:4)
当你想知道是否因为你关闭了UAC时,你已经击中了钉子。
您不应该将日志文件写入安装应用程序的位置,而是需要选择应用程序可写的位置,例如: user.home系统属性下面的目录。
java应用程序无法执行此操作和其他应用程序的原因与Data Redirection有关,这会导致对某些文件夹的写入被透明地重定向到每用户数据存储。我认为这个重定向是针对JRE禁用的(使用进程资源管理器检查,它没有'Virtualized'标记),这意味着在java程序上不会发生透明重定向。
如果您希望应用程序能够写入应用程序的安装目录,那么实现此目的的最简单方法是change the permissions of the folder on installation。
答案 1 :(得分:0)
应用程序显然没有对尝试写入文件的位置的写访问权。如果它试图写入Program Files目录,那就是预期的(应用程序通常不以管理员权限运行)。而是写入应用程序/当前用户保证可写的位置。例如,获取将指向用户主目录的Java属性user.home
,并将文件写入适当的子目录。
答案 2 :(得分:0)
我做了一些研究,并在另一个论坛中发现Program Files是Windows 7 Home Premium的受保护目录,因为Windows安全性,您必须安装c:\。仅供参考
我试图在Tomcat上编码,发现我无法将文件保存到Program Files。我必须安装c:\ Tomcat才能保存我的任何文件。