2015-06-30 3 views
2

В this answer автор @Abel предлагает использовать ShellExecute всякий раз, когда Process.Start не будет функционировать.ShellExecute vs. Process.Start

Когда я буду использовать ShellExecute - У меня никогда не было такой ситуации, что Process.Start не работал?

Кроме того, существуют ли какие-либо преимущества при использовании ShellExecute по сравнению с Process.Start?

+0

ShellExecute - это функция Windows API. В других средах этого не будет. – cubrr

+0

Потому что он не понимает этого и поэтому слепо предполагает, что он обладает магическими силами. –

ответ

4

есть какие-либо преимущества использования ShellExecute над Process.Start

Во-первых, вы должны понимать, что ShellExecute делает. От ProcessStartInfo.UseShellExecute:

При использовании операционной системы оболочки для запуска процессов, вы можете запустить какой-либо документ (который является любым зарегистрированным типом файла, связанный с исполняемым файлом, который имеет открытое действие по умолчанию) и выполнять операции на файл, например печать, с помощью объекта «Процесс». Когда UseShellExecute является ложным, вы можете запускать только исполняемые файлы, используя объект процесса .

Это означает, что он позволит вам открыть любой файл с ассоциированным типом файла, таким как данный документ Word. В противном случае вы можете вызывать только исполняемые файлы. Если вы установите этот флаг в истинно в ProcessStartInfo, внутренне, Process.Startwill 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 вы просто вызываете управляемую оболочку, которая обычно удобнее использовать.

Смежные вопросы