ShellExecute vs. Process.Start

本文关键字:Start Process vs ShellExecute | 更新日期: 2023-09-27 18:00:40

在这个答案中,作者@Abel建议在Process.Start不起作用时使用ShellExecute

我什么时候会使用ShellExecute?我从来没有遇到过Process.Start不起作用的情况?

此外,与Process.Start相比,使用ShellExecute有什么优势吗?

ShellExecute vs. Process.Start

与进程相比,使用ShellExecute有什么优势吗?启动

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

当您使用操作系统外壳启动进程时,您可以启动任何文档(这是与关联的任何注册文件类型具有默认打开操作的可执行文件)并执行操作通过使用Process对象对文件进行处理,例如打印。什么时候UseShellExecute为false,您可以使用进程对象。

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