最近我遇到了一个问题,我需要从一个提升的应用程序中打开一个网页。我需要在没有提升的情况下打开浏览器,所以我环顾四周,找到了this solution
这肯定会解决我的问题,除非CreateProcessAsUser不接受URI作为文件名,执行将失败,并显示错误消息“文件名、目录名或卷标语法不正确”。
有没有人能告诉我有没有办法通过CreateProcessAsUser启动一个网站,或者有没有类似的API来完成这项工作。请注意,我的实际应用程序总是提升的,因此我不能使用通常的Process.Start()、CreateProcess()或ShellExecute()
发布于 2013-02-21 05:41:43
要完成此任务,您需要使用两个不同的函数系列:
CreateProcess和相关函数。这些可以用来启动一个新的进程。您必须提供可执行文件image.ShellExecute和朋友的文件名。它们将使用shell的规则将谓词应用于文件,以便将文件类关联到可执行文件。为了打开URI,您需要使用ShellExecute家族中的一个。为了从提升的进程中以标准用户的身份执行,您需要使用CreateProcess系列中的一个。
您不能用一个函数同时满足您的两个需求。因此,您的解决方案是使用其中一个CreateProcessXXX函数来创建一个以标准用户身份运行的进程。该进程将依次调用ShellExecuteXXX。您将把URI作为命令行参数传递给CreateProcessXXX。
因此,您需要创建一个不同的可执行文件作为您的标准用户启动器。或者重用现有的可执行文件,但根据传递给它的参数使其切换到启动器模式。
https://stackoverflow.com/questions/14986938
复制相似问题