Блокировка CreateProcess - странное поведение - PullRequest
2 голосов
/ 13 февраля 2012

Я написал приложение, которое просто выполняет java -jar.Я хочу, чтобы стартовое приложение закрывалось сразу после выполнения CreateProcessA.

LPSTR _cmdupdate = const_cast<char *> (cmdupdate.c_str());
STARTUPINFO info = {sizeof (info)};
ZeroMemory(&info,sizeof(info));
info.cb=sizeof(info);
PROCESS_INFORMATION processInfo;
ZeroMemory(&processInfo,sizeof(processInfo));
CreateProcessA(TEXT(java_exe.c_str()), _cmdupdate, NULL, NULL, false, 0, NULL, TEXT("bin"), &info, &processInfo);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
exit(0);

Если я выполняю это через IDE (Netbeans 7), все работает нормально: Java продолжает работать, пока стартер завершается.Если я запускаю один и тот же exe-файл, дважды щелкнув по нему: java запускает jar, но стартер ждет завершения процесса java.

Так в чем разница между CreateProcess при запуске через IDE и запускомавтономные?

1 Ответ

1 голос
/ 13 февраля 2012

Интерпретатор Java - это консольный процесс.Скорее всего, ваша программа также является консольным процессом, поэтому Java наследует и разделяет вашу консоль.Вот почему ваш процесс, кажется, ждет завершения Java.На самом деле это не так, просто консоль стоит там.

Когда вы запускаете вашу программу из IDE, она, вероятно, обрабатывает консоль особым образом и заставляет ее исчезнуть после завершения вашей программы.Или, может быть, он перенаправляет вывод и в первую очередь скрывает консоль.

Решение: Используйте некоторые из флагов, определенных здесь , для обработки консоли нового процесса.Попробуйте CREATE_NEW_CONSOLE или DETACHED_PROCESS или, может быть, CREATE_NO_WINDOW.

...