微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JNA在ProgramData子文件夹上设置写入权限

我有一个用Java编写的程序,最初使用程序文件中的目录来写入这个程序的所有用户都可以访问的文件。 这要求我们的用户始终以pipe理员身份运行。 为了缓解这个问题,我们决定将使用%ALLUSERSPROFILE%环境variables的文件移动到ProgramData文件夹中。 如果在安装过程中将子目录指定为可写入,那么在我们的应用程序的这个目录中使用子文件效果很好,这使用NSIS可以正常工作。

问题出现在升级现有的用户。 Java File API提供了setWritable但在开发机器上testing之后,这似乎不起作用。 看起来Java 7的新文件API可以解决这个问题,但是没有发布date,我宁愿不等待。

看来最简单的解决scheme是使用JNA来调用适当的Windows API调用来设置此目录可写。 由于升级软件需要pipe理权限,类似于安装,应该让这个改变通过罚款。 不过,我不确定从哪里开始,从未使用过JNA或Windows API。 有关加载哪个Windows库以及调用哪些函数的build议将值得赞赏,特别是如果有人以前遇到过类似的问题。

Apache HTTP BasicScheme.authenticate已弃用?

jar包装为.app(OSX)和(.exe)进行部署?

有趣的Shell输出:[01; 32mtestfile.txt [00m而不是testfile.txt

使用java的mv命令

如何从Java访问Windows事件查看器日志数据

监视Java垃圾收集时的cpu,RAM,I / O使用情况

从Java调用Windows颜色系统

使用Unicode文件path

在Linux上开发JavaME应用程序

如果尚未启动,则使用Bat文件启动Java应用程序

那么,我很高兴你给出了一些背景……你可以使用JNA,但更简单的方法是执行一个调用命令行工具cacls。 它是在Windows XP安装认包含,我相信,所以它应该为你做的伎俩。 尝试Runtime.getRuntime().exec("C:\Windows\System32\cacls.exe"+options)

看看这里的文档 – > http://technet.microsoft.com/en-us/library/bb490872.aspx

我使用下面的行:

Runtime.getRuntime().exec( "C:\Windows\System32\icacls.exe "%ProgramData%my application" /grant *S-1-5-32-545:(OI)(CI)(W,M)" );

S-1-5-32-545是BUILTIN Users的SID,因为该名称仅适用于英文系统。 https://support.microsoft.com/de-de/kb/163846

这使BUILTIN Users可以独立于给定目录中的所有文件创建访问权限。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐