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有什么优势吗?启动
首先,您需要了解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,您只需调用托管包装器,这通常更方便使用。