ShellExecute против Process.Start
В этом ответе автор @Abel предлагает использовать ShellExecute
всякий раз, когда Process.Start
не будет функционировать.
Когда я буду использовать ShellExecute
- У меня никогда не было ситуации, которая Process.Start
не работал?
Кроме того, есть ли преимущества для использования ShellExecute
над Process.Start
?
1 ответ
Есть ли преимущества использования ShellExecute по сравнению с Process.Start
Во-первых, вам нужно понять, что ShellExecute
делает. От ProcessStartInfo.UseShellExecute
:
Когда вы используете оболочку операционной системы для запуска процессов, вы можете запустить любой документ (который относится к любому зарегистрированному типу файла, связанному с исполняемым файлом с действием по умолчанию) и выполнять операции с файлом, такие как печать, с помощью объекта Process., Когда UseShellExecute имеет значение false, вы можете запускать только исполняемые файлы с помощью объекта Process.
Это означает, что это позволит вам открыть любой файл, который имеет связанный тип файла, такой как заданный текстовый документ. В противном случае вы можете вызывать только исполняемые файлы. Если вы установите этот флаг в true в ProcessStartInfo
внутренне, Process.Start
вызовет тот же вызов WinAPI:
public bool Start()
{
Close();
ProcessStartInfo startInfo = StartInfo;
if (startInfo.FileName.Length == 0)
throw new InvalidOperationException(SR.GetString(SR.FileNameMissing));
if (startInfo.UseShellExecute)
{
return StartWithShellExecuteEx(startInfo);
}
else
{
return StartWithCreateProcess(startInfo);
}
}
Когда вы вызываете ShellExecute
вы используете PInvoke для прямого вызова WinAPI. С Process.Start вы просто вызываете управляемую оболочку, которую обычно удобнее использовать.