Я работаю над программой на 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 найти решение). После, я использовал ЮНА, чтобы сделать это, как это:
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);
Здесь проблема заключается в том, как сделать, чтобы ждать выполнения программы до этого процесса конца (возможно, в ЮНА, есть формы, чтобы сделать это, но слишком большой, и я не знаю, как это сделать ...)
Я думал, еще один способ сделать это, но я не знаю, если это возможно ... подмигнули как это:
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));
}
}
Whit this, у меня есть идентификатор и имя процесса. Можно было бы найти имя пользователя, который запускает этот процесс? Если мне удастся, я мог бы это сделать (единственный процесс, выполняемый администратором, был бы таким)
С уважением.
Вы пытались использовать входной процесс процесса? Что касается части о собственном коде: если вы используете системный код, вам также придется использовать зависящие от системы методы. И список дубликатов будет длинным, если вы указали ОС, на которые вы пишете код. – Paul
ОС - Windows 7. Да, я пробовал использовать InputStream и InputStreamReader, и он не работает ... – RMNBA
Ну, сначала вы должны понять, что сама JNA - это всего лишь утилита для загрузки и запуска кода из разделяемых библиотек. Код, который вы хотите создать, должен запускаться как собственный код в ОС, для которого вы его записываете. В первую очередь это не проблема Java, а скорее проблема, характерная для C++ и ОС, на которой вы хотите запустить код. [This] (http://stackoverflow.com/questions/9454019/how-to-wait-for-a-process-to-finish-c) должен сделать трюк – Paul