При запуске процессов с классом System.Diagnostics.Process
система может использовать функцию CreateProcess
или ShellExecuteEx
Win32.При использовании CreateProcess
могут быть запущены только исполняемые файлы.При использовании ShellExecuteEx
любой файл, который можно запустить с помощью команды «Пуск-> Выполнить» из оболочки.
Однако это совершенно разные способы запуска процессов.ShellExecuteEx включает оболочку и может, например, повторно использовать существующий экземпляр Word или Excel для открытия документа, используя информацию, хранящуюся в разделе реестра HKCR\<progid>\shell\<verb>
.Это может включать, например, использование DDE для поиска и активации существующего экземпляра Excel.
См. Документацию по ShellExecuteEx
SHELLEXECUTEINFO
:
Обратите внимание, что ShellExecuteEx
может возвращать или не возвращать hProcess в зависимости от того, был ли запущен новый процесс.Это поведение, которое вы видите.
CreateProcess
- это функция более низкого уровня, которая создает процесс напрямую и просто передает эквивалентные аргументы.Он всегда возвращает дескриптор процесса.
Примечание: Поскольку вы, похоже, запускаете исполняемый файл, немного удивительно, что ShellExecuteEx
не возвращает hProcess
.Тем не менее, если вы хотите убедиться, что вы получили дескриптор процесса, правильное использование UseShellExecute = false
.