c# - ProcessStartInfo.UseShellExecute 有什么大不了的?

标签 c# .net windows shell process

ProcessStartInfo.UseShellExecute 将如何影响我正在运行的进程?

我是否需要 UAC 的特殊权限才能使用 UseShellExecute?

它会在不同的用户上运行吗?

它会给我新的权限吗?

最佳答案

Windows 有两个不同的 api 函数来启动进程。底层的是 CreateProcess(),它直接映射到一个原生的 api 函数。还有 ShellExecuteEx(),一个由 shell (Explorer) 实现的函数。它具有更高级别的抽象。

它们是非常不同的功能,您可以在 ProcessStartInfo 的文档中看到这一点。 CreateProcess() 只能启动可执行文件,但它对控制控制台模式程序有很好的支持,包括重定向 I/O 和控制控制台窗口外观的能力。 ShellExecuteEx() 利用 shell 添加的功能,文件关联是重要的功能,因此您可以启动为特定文件扩展名注册的可执行文件。

这两个 api 函数都有影响进程执行方式的选项。您将看到 ProcessStartInfo 类的属性与 Process Creation Flags 之间的密切关联。 CreateProcess 和 SHELLEXECUTEINFO structure 中的字段支持ShellExecuteEx() 使用的。但这些功能并不重叠,因此您需要修改 UseShellExecute。

关于c# - ProcessStartInfo.UseShellExecute 有什么大不了的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12603377/

相关文章:

c# - 你能解释一下这个 Math.Log10 与 BigInteger.Log10 的行为吗?

c# 我如何从我的类(class)访问我的表单控件?

.net - 检查当前线程是否拥有锁

c++ - 从新线程调用时出现 COM 0x8001010E 错误

python - Windows 上的 Tensorflow 重新训练

c# - 未找到用于绑定(bind)配方的数据上下文

c# - C# 中的字符串基准 - 重构速度/可维护性

c# - Aspnet core 2.1.4 IIS启动问题

c# - 是否有等同于 : Storagefile. Openasync 的 .NET 4.5

windows - 线程可以通过自己的线程 ID 调用 SuspendThread 吗?