java - 使用 JNA 设置 ProgramData 子文件夹的写入权限

标签 java windows jna

我有一个用 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/

相关文章:

java - java 机场航类的生产者-消费者

java - 计算平均值或将 ArrayList 作为函数的参数

java - 我正在为 CertificateException 的异常(exception)而苦苦挣扎。如何生成带有主题备用名称的证书

java - 方法 : java. lang.String.getCatalogName() 的签名不适用于参数

windows - 找不到角色 "username": PostgreSQL Windows

windows - 使用 os/exec 和在命令行执行之间出现令人费解的不同结果

java - Java中如何获取一个新的指针?

windows - 如何在 firebase 实时数据库上安排通知?

java - 使用 Java JNA 和 SendInput() 发送键盘输入

Java JNA 使用 Keyhook 回调