ShellExecute与Process.Start

时间:2015-06-30 16:58:43

标签: c# wpf process

this answer中,作者@Abel建议在ShellExecute无效时使用Process.Start

我何时会使用ShellExecute - 我从未遇到Process.Start无效的情况?

此外,使用ShellExecute优于Process.Start

是否有任何优势?

1 个答案:

答案 0 :(得分:4)

  

使用ShellExecute而不是Process.Start

有什么好处

首先,您需要了解ShellExecute的作用。来自ProcessStartInfo.UseShellExecute

  

使用操作系统shell启动进程时,可以   启动任何文档(与之关联的任何已注册文件类型)   具有默认打开操作的可执行文件)并执行操作   在文件上,例如使用Process对象进行打印。什么时候   UseShellExecute为false,您只能使用以逗号启动可执行文件   过程对象。

这意味着它将允许您打开具有已分配文件类型的任何文件,例如给定的Word文档。否则,您只能调用可执行文件。如果您在ProcessStartInfo内部将此标记设置为true,则在内部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,您只需调用托管包装器,这通常更方便使用。