【问题标题】:Java App can't write on disk on Windows 7, why?Java App 无法在 Windows 7 上写入磁盘,为什么?
【发布时间】:2012-01-19 03:36:36
【问题描述】:

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

想法?

【问题讨论】:

  • 您是否收到任何错误消息?
  • 让我猜猜...写访问权限?
  • “我关闭了无人机。” UAV?没有远程飞行为您服务!什么是 NSYS?
  • NSYS 是你的新安装霸主....是nsis.sourceforge.net/Main_Page的错字

标签: java security


【解决方案1】:

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

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

java 应用程序无法执行此操作而其他应用程序可以执行此操作的原因与Data Redirection 有关,这会导致对某些文件夹的写入透明地重定向到每个用户的数据存储。我认为 JRE 禁用了此重定向(使用进程资源管理器进行检查,没有“虚拟化”标记),这意味着在 java 程序上不会发生透明重定向。

如果您希望您的应用程序能够写入应用程序的安装目录,那么完成此操作的最简单方法是change the permissions of the folder on installation

【讨论】:

  • 我不是在寻求解决方案,而是我想知道为什么 java 会发生这种情况,而其他应用程序可以做到。当然我可以写在用户目录中......但我想了解更多关于权限的事情
  • 写入程序文件目录的数据透明地重定向到当前用户的appdata。您可以通过转到“%appdata%\..\local\VirtualStore”来查看它。大多数程序都会发生透明重定向,因为它们已超出安装目录。然而,在 java 程序的情况下,它们在技术上运行在 java 的程序目录之外,因为它们依赖于 java 解释器(java.exe 或 javaw.exe)。为了防止有人恶意覆盖 java.exe 的或设置,他们完全禁用了可视化。它是一项安全功能。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我做了一些研究,在另一个论坛上发现 Program Files 是 Windows 7 Home Premium 的受保护目录,由于 Windows 安全性,您必须安装 c:\。仅供参考

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

    【讨论】:

      猜你喜欢
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 2010-09-28
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多