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

Runtime.getRuntime().exec(?) メソッド。

于 2015-12-30T01:53:44.420 に答える
0

runas他に何かが見つからない場合は、DOS コマンドをピンチで使用できると思います。(runas使用情報については、DOS プロンプトを入力してください。)

編集:残念ながら、ここのメモによると、これは明らかにサービスからは機能しません。:/runasただし、.

于 2009-09-11T09:08:51.633 に答える