Java使用用户权限执行.exe

时间:2013-08-22 18:47:49

标签: java windows permissions cmd

我在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();
            }

2 个答案:

答案 0 :(得分:0)

我认为根据this帖子,你有两种可能性:

  • 您可以{fileertr.exe
  • add a manifest
  • 您可以使用elevate.exe,使用以下代码运行二进制文件: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秒之间,线程会多次调用此方法,因此权限需要是永久性的,否则它将无法正常工作。

相关问题