在this answer中,作者@Abel建议在ShellExecute
无效时使用Process.Start
。
我何时会使用ShellExecute
- 我从未遇到Process.Start
无效的情况?
此外,使用ShellExecute
优于Process.Start
?
答案 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,您只需调用托管包装器,这通常更方便使用。