есть какие-либо преимущества использования ShellExecute над Process.Start
Во-первых, вы должны понимать, что ShellExecute
делает. От ProcessStartInfo.UseShellExecute
:
При использовании операционной системы оболочки для запуска процессов, вы можете запустить какой-либо документ (который является любым зарегистрированным типом файла, связанный с исполняемым файлом, который имеет открытое действие по умолчанию) и выполнять операции на файл, например печать, с помощью объекта «Процесс». Когда UseShellExecute является ложным, вы можете запускать только исполняемые файлы, используя объект процесса .
Это означает, что он позволит вам открыть любой файл с ассоциированным типом файла, таким как данный документ Word. В противном случае вы можете вызывать только исполняемые файлы. Если вы установите этот флаг в истинно в ProcessStartInfo
, внутренне, Process.Start
will invoke the same WinAPI call:
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 вы просто вызываете управляемую оболочку, которая обычно удобнее использовать.
ShellExecute - это функция Windows API. В других средах этого не будет. – cubrr
Потому что он не понимает этого и поэтому слепо предполагает, что он обладает магическими силами. –