我有一个用 Java 编写的程序,它最初使用它在 Program Files 中的目录来编写该程序的所有用户都可以访问的文件。这要求我们的用户始终以管理员身份运行。为了缓解这种情况,我们决定使用 %ALLUSERSPROFILE%
环境变量将需要在常规使用期间写入的文件移动到 ProgramData
文件夹。如果在安装过程中将此目录中的子文件夹指定为可写,则将此目录中的子文件夹用于我们的应用程序效果很好,这在使用 NSIS 时效果很好。
问题来自升级现有用户。 Java 文件 API 提供了 setWritable
但在开发机器上测试后这似乎不起作用。 Java 7 的新文件 API 似乎可以解决这个问题,但由于没有发布日期,我宁愿等不及了。
看起来最简单的解决方案是使用 JNA 调用适当的 Windows API 调用以将此目录设置为可写。由于升级软件需要管理员权限,类似于安装,它应该让这个变化顺利进行。但是,我不确定从哪里开始,之前从未使用过 JNA 或 Windows API。关于加载哪个 Windows 库和调用哪些函数的建议将不胜感激,特别是如果有人以前遇到过类似的问题。
最佳答案
很高兴您提供了一些背景知识...您可以使用 JNA,但更简单的方法是执行对命令行实用程序 cacls 的调用。它默认包含在 Windows XP 安装中,我相信,所以它应该可以为您解决问题。试试 Runtime.getRuntime().exec("C:\\Windows\\System32\\cacls.exe"+options)
在此处查看文档 -> http://technet.microsoft.com/en-us/library/bb490872.aspx
关于java - 使用 JNA 设置 ProgramData 子文件夹的写入权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5464535/