4

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

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

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

4

1 回答 1

3

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

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

要打开 URI,您需要使用其中一个ShellExecute系列。为了从您的提升流程中作为标准用户执行,您需要使用该CreateProcess系列中的一个。

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

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

于 2013-02-20T21:41:43.227 回答