Как обеспечить запуск EXE с помощью ShellExecuteEx - PullRequest
0 голосов
/ 15 июня 2011

У меня есть EXE1, для запуска которого требуется файл конфигурации.

Я использую ShellExecuteEx для запуска EXE1 из EXE2.

Он работает нормально, но если файл конфигурации не задан для EXE1, он не запускается, но ShellExecuteEx возвращает TRUE (1).
Я проверяю возвращаемое значение ShellExecuteEx для отключения кнопки «Запуск» в EXE2, которая запускает EXE1.

Так как ShellExecuteEx возвращает TRUE (1), кнопка Launch - это Disable, какая неправильная функциональность.

Я тоже пробовал это с CreateProcess, он также ведет себя так же.

Как я могу убедиться, что exe запущен или нет.

Ответы [ 2 ]

2 голосов
/ 15 июня 2011

Вам придется каким-то образом передавать сигнал из второй программы в первую программу - используя разделяемую память, мутанты или какой-либо другой метод межпроцессного взаимодействия.

ShellExecuteEx заботится только о том, может ли исполняемый файл запускаться, а не о том, способен ли он делать то, что вы ожидали.

В качестве альтернативы используйте вместо этого CreateProcess и отслеживайте код возврата дочернего процесса.

1 голос
/ 15 июня 2011

ShellExecuteEx возвращает true, если он может запустить исполняемый файл.Фактически он не передает код возврата из запущенного приложения.

Вы можете использовать WaitForSingleObject для ожидания нескольких миллисекунд на дескрипторе запущенного приложения (hProcess) в SHELLEXECUTEINFO struct.Если WaitForSingleObject возвращает WAIT_OBJECT_0 или WAIT_ABANDONED, вы можете «предположить», что запущенное приложение завершилось.Если запущенное приложение продолжает работать, время ожидания истечет.Однако это не надежный метод.Более надежный способ - использовать какой-либо механизм IPC, например pipe между приложениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...