2
私はJavaプログラムで作業しています。それは管理者としてアプリケーションを実行しなければならず、その実行が終了したら別のことをします。初めに、私は JNAを使用して特定のプロセスを見つけるにはどうすればよいですか?
String cmd[] = new String [3];
cmd [0] = "cmd";
cmd [1] = "/C";
cmd [2] = "runas /user:..."
Process p = Runtime.getRuntime().exec(cmd);
を使用しますが、問題は、私は(私はそれを試してみましたが、私は解決策を見つけるdidn't)パスワードを入力することはできませんでした。後、私はこのような、それを作るためにJNAを使用:ここで
boolean CreateProcessWithLogonW
(WString lpUsername,
WString lpDomain,
WString lpPassword,
int dwLogonFlags,
WString lpApplicationName,
WString lpCommandLine,
int dwCreationFlags,
Pointer lpEnvironment,
WString lpCurrentDirectory,
STARTUPINFO lpStartupInfo,
PROCESS_INFORMATION lpProcessInfo);
、問題は、この処理を終了する(多分、JNAで、これを行うためのフォームがあるまで、プログラムの実行を待つために作る方法です、しかし、このように...大きすぎると私はそれを行う方法を知っているドント...)私はそれを行うための別の方法を考え
が、it's可能であれば私が知っているドント:
Kernel32 kernel32 = (Kernel32) Native.loadLibrary(Kernel32.class, W32APIOptions.UNICODE_OPTIONS);
Tlhelp32.PROCESSENTRY32.ByReference processEntry = new Tlhelp32.PROCESSENTRY32.ByReference();
WinNT.HANDLE snapshot = kernel32.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));
try
{
while (kernel32.Process32Next(snapshot, processEntry))
{
System.out.println(processEntry.th32ProcessID + "\t" + Native.toString(processEntry.szExeFile));
}
}
これは、私はIDとプロセスの名前を持っています。このプロセスを実行するユーザーの名前を見つけることは可能でしょうか?私が成功すれば、私はそれを行うことができます(管理者として実行される唯一のプロセスはこれです)
よろしく。
あなたはプロセスの入力ストリームを使ってみましたか?ネイティブコードに関する部分については、システム依存コードを使用している場合は、システム依存メソッドも使用する必要があります。あなたがコードを書いているOSを指定していれば、重複のリストは長くなるでしょう。 – Paul
OSはWindows 7です。はい、私はInputStreamとInputStreamReaderを使ってみましたが、うまくいきませんでした。 – RMNBA
JNA自体は、共有ライブラリからコードをロードして実行するユーティリティであることをまず理解しておいてください。作成したいコードは、それを書き込むOS上でネイティブコードとして実行する必要があります。だから、これは最初はJavaの問題ではなく、むしろコードを実行するC++とOS固有の問題です。 [これ](http://stackoverflow.com/questions/9454019/how-to-wait-for-a-process-to-finish-c)は、トリックを行う必要があります – Paul