Windows サービスとして実行されている Java アプリケーションがあります。特定の機能は、バイナリを実行する必要がありますが、アプリケーションを起動した別のユーザーで実行する必要があります。
「別のユーザーとして実行」スタイルで exe を呼び出す方法はありますか。
ProcessBuilder の API を確認しましたが、ユーザーに関するものは見つかりませんでした。これを達成するためのサードパーティのツールはありますか。
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");
Runtime.getRuntime().exec(?) メソッド。
runas
他に何かが見つからない場合は、DOS コマンドをピンチで使用できると思います。(runas
使用情報については、DOS プロンプトを入力してください。)
編集:残念ながら、ここのメモによると、これは明らかにサービスからは機能しません。:/runas
ただし、.