Цитата:
Сообщение от EviLrul
Хотелось бы Вас попросить прокоментить ваш код, хотелось бы лучше его понять...
|
Что именно в этом коде непонятно? Здесь центральное место это вызов API-функции CreateProcess, всё что до этого - подготовительные операции, то что после - завершающие операции. API-функция WaitForSingleObject ожидает сигнала, в данном случае бесконечно (INFINITE), в случае с хэндлом процесса сигналом является завершение приложения, т.е. эта функция в данном случае фактически "повесит" запускающее приложение пока не завершится запускаемое приложение.
По поводу функции WinExec - она очень древняя и ей лучше не пользоваться. Лучшая ей замена это CreateProcess или же менее предпочтительная ShellExecute.
Цитата:
Сообщение от EviLrul
и на разных ПК и разных ОС (winXP, win7), то стартует, то выдаёт по не понятной мне закономерности "CreateProcess failed" (я так понимаю что CreateProcess не отрабатывал в какие то моменты) может у меня всё же код кривой? поможите чем сможите...
|
Самого факта что процесс не был запущен не достаточно. В случае ошибки CreateProcess устанавливает так же и код ошибки который можно узнать API-функцией GetLastError и декодировать её в осмысленный текст API-функцией SysErrorMessage. Или же вместо этого можно просто вызвать исключение функцией RaiseLastOSError.
Цитата:
Сообщение от EviLrul
А так же интересно, почему не отрабатывает все же мой вариант, есть предположения?
|
Во-первых не указано расширение запускаемого файла - имя у этого файла скорее всего не просто "start", а "start.exe" - вот так и нужно указывать в WinExec.
Во-вторых возможно это файл не находится ни в одной из тех папок в которых WinExec может его найти, поэтому желательно указывать перед именем файла и полный путь к нему, или как минимум устанавливать соответствующую текущую директорию с помощью SetCurrentDir.