В описании что Process.Start
возвращает это говорит:
true, если ресурс процесса запущен; false, если новый ресурс процесса не запущен (например, если существующий процесс используется повторно).
Таким образом, если вы запустите EXE, ожидается, что вызов Start
вернет true (при условии, что EXE существует). Для случая, когда вы не даете ему EXE, это становится немного непредсказуемым, что происходит. И основная причина в том, что оболочка обрабатывает ваш Start
. Если вы повторно запустите свои тесты с application.StartInfo.UseShellExecute = false;
, вы получите совершенно разные результаты. Оказывается, вы можете запускать EXE (или COM-файлы) только тогда, когда UseShellExecute имеет значение false.
Ключевым моментом является то, что Start возвращает true, только если был запущен новый ресурс процесса. В моем тестировании я обнаружил, что если я запускаю файл .xlsx впервые, создается новый процесс Excel (фактически он становится дочерним процессом). Это делает Start()
верным. Для каждого следующего файла .xlsx существующий процесс используется повторно, поэтому новый процесс не создается, поэтому Start
возвращает false.
То же самое касается и того, когда я запускаю файл .mp4. На моем устройстве это расширение по-прежнему связано с проигрывателем Windows Movie по умолчанию. Это создает только дочерний процесс в уже запущенной службе svchost. Это, вероятно, означает, что false
возвращается.
Если я использую расширение, связанное с моим проигрывателем VLC, Start
возвращает значение true для каждого нового файла, который я предлагаю, но, судя по всему, проигрыватель VLC передает свою работу уже запущенному экземпляру, а затем закрывает недавно начатый процесс.
process.Start
возвращает правильный результат. То, что он возвращает, зависит от того, что запускается и как его зарегистрированный обработчик выбирает для работы. Исходя из этого, вы можете или не можете найти запуск нового процесса. Стоит отметить, что пользователи имеют контроль над тем, что связано с определенным расширением, и, таким образом, что будет делать запуск файла с определенным расширением.
Вот как выглядит мое дерево процессов после нескольких экспериментов с несколькими типами файлов:
Для тех, кто получил процесс. Идентификатор все еще действителен.