Process.Start vs Process `p = new Process ()` в C #? - PullRequest
3 голосов
/ 12 февраля 2011

Как спрашивается в этом посте , есть два способа вызвать другой процесс в C #.

Process.Start("hello");

И

Process p = new Process();
p.StartInfo.FileName = "hello.exe";
p.Start();
p.WaitForExit();
  • Q1: Каковы плюсы / минусы каждого подхода?
  • Q2: Как проверить, произошла ли ошибка с методом Process.Start()?

Ответы [ 3 ]

6 голосов
/ 12 февраля 2011

С первым методом вы не сможете использовать WaitForExit, так как метод возвращает ноль, если процесс уже запущен.

Способ проверки, запущен ли новый процесс, отличается между методами.Первый возвращает объект Process или null:

Process p = Process.Start("hello");
if (p != null) {
  // A new process was started
  // Here it's possible to wait for it to end:
  p.WaitForExit();
} else {
  // The process was already running
}

Второй возвращает bool:

Process p = new Process();
p.StartInfo.FileName = "hello.exe";
bool s = p.Start();
if (s) {
  // A new process was started
} else {
  // The process was already running
}
p.WaitForExit();
6 голосов
/ 12 февраля 2011

Для простых случаев преимуществом является в основном удобство.Очевидно, у вас есть больше опций (рабочий путь, выбор между shell-exec и т. Д.) С маршрутом ProcessStartInfo, но есть и статический метод Process.Start (ProcessStartInfo).

Повторная проверка на ошибки;Process.Start возвращает объект Process, поэтому вы можете дождаться выхода и проверить код ошибки, если вам нужно.Если вы хотите захватить stderr, вам, вероятно, нужен любой из подходов ProcessStartInfo.

1 голос
/ 12 февраля 2011

Очень небольшая разница. Статический метод возвращает объект процесса, поэтому вы все равно можете использовать «p.WaitForExit ()» и т. Д. - используя метод, в котором вы создаете новый процесс, было бы легче изменить параметры процесса (сходство с процессором и т. Д.) Перед запуском процесс.

Кроме этого - без разницы. Новый объект процесса создается в обоих направлениях.

В вашем втором примере - это идентично этому:

Process p = Process.Start("hello.exe");
p.WaitForExit();
...