我在c#中编写了一个程序来更改windows中的文件和文件夹属性。 我从java运行这个程序,从windows all启动程序 工作得很好,在java中只是当我尝试更改文件夹时可以更改文件 它抛出:
Problem signature: Problem Event Name: CLR20r3 Problem Signature 01: fileattr.exe Problem Signature 02: 1.0.0.0 Problem Signature 03: 5203a06f Problem Signature 04: mscorlib Problem Signature 05: 4.0.30319.18052 Problem Signature 06: 5173c144 Problem Signature 07: 43cf Problem Signature 08: 13c Problem Signature 09: System.UnauthorizedAccess OS Version: 6.1.7601.2.1.0.256.48
我已将processbuilder目录设置为user.home,认为可能会出现问题 因为那,但不起作用。 我的代码:
try { ProcessBuilder pb = new ProcessBuilder("fileattr", "+t", "\"".concat(path).concat("\"")); pb.environment().put("fileattr", pathToApp); pb.directory(new File(System.getenv("WINDIR") + "\\system32")); Process p = pb.start(); p.waitFor(); p.destroy(); } catch (Throwable t) { t.printStackTrace(); }
答案 0 :(得分:0)
我认为根据this帖子,你有两种可能性:
ProcessBuilder pb = new ProcessBuilder("elevate", "fileattr");
我希望我回答你的问题。
答案 1 :(得分:0)
第一种可能性没有解决,我使用清单文件为UAC级别的两个选项构建了filleattr:
highestAvailable|requireAdministrator
这是清单:
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
</requestedPrivileges>
</security>
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
</requestedPrivileges>
</security>
第二个有问题,当程序启动提取时,我在java jar中包含两个.exe文件 .exe文件并尝试执行它们,问题是,提取过程正在修改可执行文件中的内容,当我尝试运行原始文件时,所有工作都完美无缺,否则它会抛出:
也许@Templar sugestion应该可行,我只需要授予JVM用户权限,这足以改变文件夹属性,我会尝试。
重要的是,在30秒和30秒之间,线程会多次调用此方法,因此权限需要是永久性的,否则它将无法正常工作。