【问题标题】:how to run a batch file from java using administrator privileges?如何使用管理员权限从 java 运行批处理文件?
【发布时间】:2016-07-24 17:22:03
【问题描述】:
how to run a batch file from java using administrator privileges?

我正在尝试这样做。但是代码不起作用。

String cmd = "runas /profile /user:Administrator /cmd.exe /C certutil -addstore ROOT  E:\\WORK\\UI\\DesktopRecorder\\userdata\\certgen\\X509CA\\ca\\new_ca.crt";

Runtime run = Runtime.getRuntime();
Process process = run.exec(cmd);

【问题讨论】:

标签: java file batch-file privileges administrator


【解决方案1】:

runas 需要将其主要输入参数封装在双引号中。更重要的是 cmd.exe 也是如此,如果你传递给它一个带有空格的命令字符串,那么你必须使用转义字符才能让它在 windows 命令提示符下工作:

runas /profile /user:Administrator "cmd.exe /C \"certutil -addstore ROOT  E:\\WORK\\UI\\DesktopRecorder\\userdata\\certgen\\X509CA\\ca\\new_ca.crt\""

然后您必须再次转义整个字符串,以便它在您的 java 代码中工作:

String cmd = "runas /profile /user:Administrator \"cmd.exe /C \\\"certutil -addstore ROOT  E:\\\\WORK\\\\UI\\\\DesktopRecorder\\\\userdata\\\\certgen\\\\X509CA\\\\ca\\\\new_ca.crt\\\"\"";

有时在带有嵌套 cmd 调用的 runas 中,您不必转义反斜杠 \ 字符,因此如果失败,您可能想尝试用两个反斜杠替换四个反斜杠的序列。祝你好运!

【讨论】:

    【解决方案2】:

    您可以创建 bat 文件的快捷方式,并从属性 > 高级中以管理员身份运行,

    现在你已经为你的 bat 文件创建了一个快捷方式,假设它的名字是 example.bat 并且它位于 C 盘,所以这意味着它的全名是 c:\\example.bat.lnk

    为了运行这个快捷方式,你需要使用 ProcessBuilder 来运行它, 它应该是这样的:

    ProcessBuilder pb = new ProcessBuilder("cmd", "/c","c:\\example.bat.lnk");   
    Process p = pb.start();
    

    它无法使用 Runtime.getRuntime().exec();

    【讨论】:

    • 这需要用 try/catch 块包围以解决 IOExceptions 以便编译
    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多