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
确实在内部这样做。
视情况而定。它调用CreateProcessWithLogonW
或CreateProcess
。调用的函数来自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 功能的主要内容,如果未能解决你的问题,请参考以下文章