使用 CreateProcessAsUser 启动 url

Zai*_*mir 5 c# c++ windows uri elevation

最近我遇到了一个问题,我需要从提升的应用程序打开网页。我需要以非提升方式打开浏览器,所以我环顾四周,找到了这个解决方案

这肯定会解决我的问题,除了CreateProcessAsUser不接受 URI 作为文件名,执行将失败,错误消息为“文件名、目录名或卷标语法不正确”

有人可以告诉我是否有办法通过 CreateProcessAsUser 启动网站,或者是否有类似的 API 可以完成这项工作。请注意,我的实际应用程序始终处于提升状态,因此我无法使用通常的Process.Start()CreateProcess()ShellExecute()

Dav*_*nan 3

您需要使用两个不同的函数系列来完成此任务:

  1. CreateProcess及相关功能。这些可用于启动新流程。您必须提供可执行映像的文件名。
  2. ShellExecute和朋友。这些将使用 shell 的规则将动词应用于文件,以将文件类与可执行文件关联起来。

为了打开 URI,您需要使用该ShellExecute系列之一。为了从提升的进程中以标准用户身份执行,您需要使用该系列之一CreateProcess

您无法通过单一功能满足这两个要求。因此,您的解决方案是使用其中一个CreateProcessXXX函数来创建一个以标准用户身份运行的进程。该进程将依次调用ShellExecuteXXX. 您将把 URI 作为命令行参数传递给CreateProcessXXX.

因此,您需要创建一个不同的可执行文件作为标准用户启动程序。或者重新使用现有的可执行文件,但根据您传递的参数将其切换到启动器模式。