使用CreateProcessAsUser启动URL

时间:2013-02-20 18:09:51

标签: c# c++ windows uri elevation

最近我遇到了一个需要从提升的应用程序打开网页的问题。我需要打开浏览器才能打开,所以我环顾四周找到了this solution

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

有人可以告诉我是否有办法通过CreateProcessAsUser启动网站,或者是否有类似的API来完成工作..请注意我的实际应用程序总是被提升,因此我不能使用通常的{{1 }},Process.Start()CreateProcess()

1 个答案:

答案 0 :(得分:3)

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

  1. CreateProcess及相关功能。这些可用于启动新流程。您必须提供可执行映像的文件名。
  2. ShellExecute和朋友们。这些将使用shell的规则将动词应用于文件,以将文件类与可执行文件相关联。
  3. 要打开URI,您需要使用ShellExecute系列之一。要从升级过程中以标准用户身份执行,您需要使用CreateProcess系列之一。

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

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