【问题标题】:Launching .exe in its own directory with elevation priviledges使用提升的权限在其自己的目录中启动 .exe
【发布时间】:2012-08-24 08:15:32
【问题描述】:

我的问题很简单,我想在自己的目录中启动一个 .exe,但具有提升权限/特权。 我知道这个问题之前提出过,但我没有找到解决问题的正确方法。


确实,我第一次尝试这个:

String workingDir = "C:\\TEST\\";
String cmd = workingDir + "game.exe";
Runtime.getRuntime().exec(cmd,null,new File(workingDir));

我收到以下错误:

CreateProcess error=740, The requested operation requires elevation

然后我尝试了这个:

ProcessBuilder builder = new ProcessBuilder(
    new String[] {"cmd.exe", "/C","C:\\TEST\\game.exe"});
Process newProcess = builder.start();

它运行但不在自己的目录中。请问如何解决这个问题?

【问题讨论】:

    标签: java exe elevated-privileges


    【解决方案1】:

    我想知道这是否可行:

    String workingDir = "C:\\TEST\\";
    ProcessBuilder builder = new ProcessBuilder(
        new String[] {"cmd.exe", "/C",workingDir+"game.exe"}
      );
    builder.directory(new File(workingDir));
    Process newProcess = builder.start();
    

    【讨论】:

    • 新文件()?问题:这不会删除我以前的文件夹吗?我有很多数据存储在其中,我确实想在运行代码之前冒险。你确定它不会删除之前的文件夹“workingDir”吗?谢谢!
    • 不,创建一个新的 File 对象不会对磁盘​​上​​的底层文件进行任何更改,它只是创建一个文件的表示。要在磁盘上实际创建一个新文件,需要一个额外的方法调用(即使这样,如果文件已经存在,它也会失败)。
    • 好的,我刚刚尝试过,它可以工作。非常感谢。我不知道谁给了正确的答案,因为你们都给了我相同且正确的答案。我该怎么办 ?无论如何,谢谢你的帮助!
    • 您认为最能描述解决方案的答案。如果每个答案只描述了解决方案的一部分,鼓励作者编辑他们的答案以使其更完整;或创建您自己的完全提供解决方案的答案并接受它。
    【解决方案2】:

    我认为提升分叉进程的权限是不可能的。您应该使用拥有所需权限的帐户开始新流程

    【讨论】:

      【解决方案3】:

      也许用 cd 和要运行的命令制作一个批处理文件,然后用 cmd 执行该批处理文件。

      【讨论】:

        【解决方案4】:

        看来你要设置

        builder.directory(new File("C:\\TEST"));
        

        哪个

        设置此流程构建器的工作目录


        否则,您似乎需要以管理员身份运行。

        https://www.google.co.uk/search?q=CreateProcess+error%3D740%2C+The+requested+operation+requires+elevation

        【讨论】:

        • 不正确,因为我可以使用 ProcessBuilder 运行这个 exe 文件,但不能在它自己的目录中运行,如上所述。
        • 感谢您编辑您的答案。如上所述,我担心 new File() ?问题:这不会删除我以前的文件夹吗?我有很多数据存储在其中,我确实想在运行代码之前冒险。你确定它不会删除之前的文件夹“workingDir”吗?谢谢!
        • 即使您不小心调用了new File("C:\\TEST").delete();,它也不会删除该目录,除非它为空(您必须先删除其中的每个文件和目录)。听起来你需要备份。 ;) 如果您不确定,我会尝试使用您需要的文件的小副本。 ;)
        • 它工作正常,非常感谢!由于你们都提供了相同的答案,我不知道谁分配了积极的答案。但我想你比 fd 更需要积分。我希望你能理解。无论如何谢谢你的帮助!!!
        • @user1633807 我也会给较低的分数。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 2021-01-31
        • 2012-10-28
        相关资源
        最近更新 更多