Process.Start 功能

Posted

技术标签:

【中文标题】Process.Start 功能【英文标题】:Process.Start Functionality 【发布时间】:2014-11-26 16:10:30 【问题描述】:

Process.Start 方法是否调用底层 Windows API 函数 CreateProcess?

查看 Microsoft 文档,Process.Start 可以在 C++ 或 C# 中使用,但 CreateProcess 只能在 C++ 中使用。

我只是想确定一个函数是否利用另一个函数,以及这是否是 C# 与 C++ 中 API 调用的一般情况。

【问题讨论】:

CreateProcess 可以通过 PInvoke 在 C# 中使用,但这样做没有意义,因为 Process.Start 确实在内部这样做。 视情况而定。它调用CreateProcessWithLogonWCreateProcess。调用的函数来自Microsoft.Win32.NativeMethods。至少,这是我在使用Reflector 时可以看到的。 referencesource.microsoft.com/#System/services/monitoring/… 所有 .net 方法/类都可以从 C++/CLI 调用,我认为这就是 MSDN 中的示例所指的。您不能从本机代码调用Process.Start 【参考方案1】:

根据您传入的 StartInfo 中的设置,它可以调用 3 个可能的本机函数。

如果UseShellExecute = true 它将调用ShellExecuteEx。 如果UseShellExecute = false 并且您设置了用户名,那么它将调用CreateProcessWithLogonW。 如果UseShellExecute = false 并且您没有设置用户名,那么它将调用CreateProcess

您可以通过reference source自己关注代码。

如果您想直接调用CreateProcess(或任何本机函数),则需要执行“Platform Invoke (P/Invoke)”。有一些网站可以帮助您找出 P/Invoke 签名 for common functions。这个过程更加复杂和复杂,使用Process.Start 更简单。

【讨论】:

以上是关于Process.Start 功能的主要内容,如果未能解决你的问题,请参考以下文章

C# Process.Start()方法详解

C# Process.Start()方法详解

Process.Start 打开资源管理器

我必须处理 Process.Start(url) 吗?

C# 中的 Process.Start 与 Process `p = new Process()`?

进程与线程