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 вы просто вызываете управляемую оболочку, которую обычно удобнее использовать.

Другие вопросы по тегам