6

我们有一个作为 Windows 服务运行的 java 应用程序。一个特定的功能需要执行一个二进制文件,但与启动应用程序的用户不同。

有什么方法可以调用具有“以不同用户身份运行”样式的 exe。

我检查了 ProcessBuilder 的 API,但没有发现任何与用户相关的内容。是否有任何第三方工具可以实现这一目标。

4

3 回答 3

2

您可以使用PSExec以不同的用户身份执行进程。命令行如下所示:

psexec.exe -u username -p password mybinary.exe

然后,您可以使用 ProcessBuilder 围绕此构建命令。

编辑:这是一个如何做到这一点的例子:

public int startProcess(String username, String password, 
        String executable, String... args) throws IOException {

    final String psexec = "C:\\PsTools\\psexec.exe"; //psexec location

    //Build the command line
    List<String> command = new LinkedList<String>();
    command.add(psexec);

    if(username != null) {
        command.add("-u");
        command.add(username);
        command.add("-p");
        command.add(password);
    }

    command.add(executable);
    command.addAll(Arrays.asList(args));

    ProcessBuilder builder = new ProcessBuilder(command);
    Process process = builder.start();

    int returnCode;

    try {
        returnCode = process.waitFor();
    } catch (InterruptedException e) {
        returnCode = 1;
    }

    return returnCode;
}

然后你可以像这样使用它:

startProcess("Bob", "Password", "Notepad.exe", "C:\\myfile.txt");
于 2009-09-11T13:38:03.337 回答
0

我相信runas如果你找不到别的东西,你可以在紧要关头使用 DOS 命令。(runas输入 dos 提示符以获取使用信息。)

编辑:不幸的是,根据此处的注释,这显然不适用于服务。:/ 您也许可以创建一个单独的小型包装应用程序,您可以调用该应用程序,然后使用 . 调用二进制文件runas

于 2009-09-11T09:08:51.633 回答
0

Runtime.getRuntime().exec(?) method.

于 2015-12-30T01:53:44.420 回答