код:
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof (SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = "open";
sei.lpFile = "notepad.exe";
sei.nShow = SW_SHOWNORMAL;
if (ShellExecuteEx (&sei))
{
WaitForSingleObject (sei.hProcess, INFINITE);
}
Как отмечает Джерри, это плохо для вашего собственного графического интерфейса. Но если процесс, который вы запускаете, прямо или косвенно, выполняет широковещательную передачу SendMessage, то это может привести к катастрофической тупиковой ситуации, поскольку у вашего процесса есть окно, но он не перекачивает никаких сообщений: запущенный процесс ждет, пока ваш код обработает его сообщение, ты ждешь этого Clang ...
Вместо этого можно использовать MsgWaitForMultipleObjects или, что еще лучше, разделить запуск и ожидание на поток и просто отключить любую часть вашего пользовательского интерфейса, с которой пользователь не хочет взаимодействовать.