我们有一个作为 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/