Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java应用程序可以';Windows 7上没有写磁盘,为什么?_Java_Security - Fatal编程技术网

Java应用程序可以';Windows 7上没有写磁盘,为什么?

Java应用程序可以';Windows 7上没有写磁盘,为什么?,java,security,Java,Security,我编写了一个Java应用程序,并用NSIS(或NSYS…)安装程序将其打包。我工作得很干净,但有时我发现对于一些在Windows7上运行的用户来说,应用程序根本无法在磁盘上写入(它甚至无法写入日志)。应用程序安装在c:\Programs(或d或e…)上。技术支持人员说,他们通过在c:\中安装来解决这个问题。为什么会发生这种情况?它与Java安全性有关吗?也许在我的Windows安装和其他安装中,我没有注意到它,因为我已经关闭了UAV 想法?当你怀疑这是否是因为你关闭了UAC时,你已经一针见血了

我编写了一个Java应用程序,并用NSIS(或NSYS…)安装程序将其打包。我工作得很干净,但有时我发现对于一些在Windows7上运行的用户来说,应用程序根本无法在磁盘上写入(它甚至无法写入日志)。应用程序安装在c:\Programs(或d或e…)上。技术支持人员说,他们通过在c:\中安装来解决这个问题。为什么会发生这种情况?它与Java安全性有关吗?也许在我的Windows安装和其他安装中,我没有注意到它,因为我已经关闭了UAV


想法?

当你怀疑这是否是因为你关闭了UAC时,你已经一针见血了

您不应该将日志文件写入应用程序安装的位置,而是需要选择应用程序可写入的位置,例如user.home系统属性下的目录

java应用程序不能做到这一点,而其他应用程序可以做到这一点的原因与此有关,这导致对某些文件夹的写入被透明地重定向到每个用户的数据存储。我认为JRE禁用了这种重定向(使用process explorer检查,它没有“虚拟化”标记),这意味着在java程序上不会发生透明重定向


如果您希望应用程序能够写入应用程序的安装目录,那么实现这一点的最简单方法是。

当您怀疑这是否是因为UAC已关闭时,您已经一针见血了

您不应该将日志文件写入应用程序安装的位置,而是需要选择应用程序可写入的位置,例如user.home系统属性下的目录

java应用程序不能做到这一点,而其他应用程序可以做到这一点的原因与此有关,这导致对某些文件夹的写入被透明地重定向到每个用户的数据存储。我认为JRE禁用了这种重定向(使用process explorer检查,它没有“虚拟化”标记),这意味着在java程序上不会发生透明重定向


如果希望应用程序能够写入应用程序的安装目录,那么最简单的方法是。

应用程序显然没有对尝试写入文件的位置的写入权限。如果它试图写入程序文件目录,这是意料之中的(应用程序通常不使用管理员权限运行)。而是写入到应用程序/当前用户保证可写入的位置。例如,获取Java属性
user.home
,该属性将指向用户的主目录,并将文件写入相应的子目录。

应用程序显然没有对尝试写入文件的位置的写入权限。如果它试图写入程序文件目录,这是意料之中的(应用程序通常不使用管理员权限运行)。而是写入到应用程序/当前用户保证可写入的位置。例如,获取Java属性
user.home
,它将指向用户的主目录,并将文件写入相应的子目录。

我做了一些研究,在另一个论坛中发现,程序文件是Windows 7 home Premium的受保护目录,出于Windows安全考虑,您必须安装c:\。仅供参考


我试图在Tomcat上编写代码,但发现无法将文件保存到程序文件中。我必须安装c:\Tomcat才能保存我的任何文件。

我做了一些研究,在另一个论坛上发现,程序文件是Windows 7 Home Premium的受保护目录,因为Windows安全,您必须安装c:\。仅供参考


我试图在Tomcat上编写代码,但发现无法将文件保存到程序文件中。我必须安装c:\Tomcat才能保存我的任何文件。

是否收到任何错误消息?让我猜猜。。。写入访问权限?“我已关闭UAV。”?没有遥控飞行!什么是NSYS?NSYS是你的新安装霸主。。。。是打字错误吗?你收到错误信息了吗?让我猜猜。。。写入访问权限?“我已关闭UAV。”?没有遥控飞行!什么是NSYS?NSYS是你的新安装霸主。。。。这是一个打字错误,我不是在要求一个解决方案,而是想知道为什么java会出现这种情况,而其他应用程序可以做到这一点。当然,我可以写在用户目录。。。但是我想知道更多关于权限的信息,写入程序文件目录的数据会透明地重定向到当前用户的appdata。您可以通过转到“%appdata%\..\local\VirtualStore”来查看它。大多数程序都会发生透明重定向,因为它们的安装目录已用完。然而,在java程序的情况下,从技术上讲,它们运行在java的程序目录之外,因为它们依赖于java解释器(java.exe或javaw.exe)。为了防止有人恶意覆盖java.exe或设置,他们完全禁用了可视化。这是一个安全特性。我不是在寻求解决方案,而是想知道为什么java会出现这种情况,而其他应用程序可以做到这一点。当然,我可以写在用户目录。。。但是我想知道更多关于权限的信息,写入程序文件目录的数据会透明地重定向到当前用户的appdata。您可以通过转到“%appdata%\..\local\VirtualStore”来查看它。大多数程序都会发生透明重定向,因为它们的安装目录已用完。然而,在java程序的情况下,从技术上讲,它们运行在java的程序目录之外,因为它们依赖于java解释器(java.exe或javaw.exe)。为了防止有人恶意覆盖java.exe或设置,他们完全禁用了可视化。一会儿