Как решить, следует ли установить для свойства ProcessStartInfo.UseShellExecute значение true или false? - PullRequest
0 голосов
/ 11 июля 2019

Я вызываю / запускаю .exe-приложения и батник-файлы из моего приложения на C # windows-формах (я также передаю параметры).Как определить, нужно ли для свойства ProcessStartInfo.UseShellExecute установить значение true или false?В каких ситуациях истина будет лучше, чем ложь, и наоборот?

Я использую класс ProcessStartInfo для установки всей информации о процессе.Затем я использую метод System.Diagnostics.Process.Start (ProcessStartInfo), чтобы запустить процесс на основе моего ProcessStartInfo.


using System.Diagnostics;

ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = "[something]";
processInfo.Arguments = "[parameter1] [parameter2] [parameter3]";
Process.Start(processInfo);

Я ожидаю, что процессы запустятся и будут работать правильно.Если мне нужно добавить дополнительную информацию / уточнить что-то, пожалуйста, дайте мне знать, это мой первый вопрос.

1 Ответ

1 голос
/ 11 июля 2019

Вы можете видеть в источнике .NET:

  • UseShellExecute = true =>

внутренняя функция StartWithShellExecuteEx => вызовы ShellExecuteEx

  • UseShellExecute = false =>

внутренняя функция StartWithCreateProcess => вызовы CreateProcessWithLogonW или CreateProcessW

Обычно вы используете true, если вы хотите запустить исполняемый файл, связанный с расширением.например:

            using (Process p = new Process())
            {
                string sImage = @"e:\test.jpg";
                p.StartInfo.FileName = sImage;
                p.StartInfo.Verb = "open";
                p.StartInfo.UseShellExecute = true;
                p.Start();
            }

Если я установлю false, произойдет сбой, потому что он попытается вызвать CreateProcessW с «e: \ test.jpg» в качестве командной строки

...