java - 在java中用不同的用户调用外部进程

标签 java exec

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

有什么方法可以让我们以“以不同用户身份运行”风格调用 exe。

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

最佳答案

您可以使用 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");

关于java - 在java中用不同的用户调用外部进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1409852/

相关文章:

java - Hibernate——从任意字段加载记录

Java 多线程 - Eratosthenes 筛法的基本并行示例

java - 如何使用Java的ProcessBuilder.start()暂停进程运行?

C - 使用 exec() 而不是 system()

python - 如何在 Python 中切换执行到新脚本?

java - 未从流中接收最终数据

java - 在面板中排列项目

java - 服务层在实践中注入(inject)多个DAO

php - 如何在没有exec的情况下在php中使用ffmpeg调整视频大小

node.js - 为什么 NodeJS execSync() 在执行自定义脚本时太慢