最近我遇到了一个问题,我需要从提升的应用程序打开网页。我需要以非提升方式打开浏览器,所以我环顾四周,发现这个解决方案 https://stackoverflow.com/a/287072/127602
这肯定会解决我的问题,除了CreateProcessAsUser
不接受 URI 作为文件名,执行将失败,并显示错误消息“文件名、目录名或卷标语法不正确”
有人可以告诉我是否有办法通过 CreateProcessAsUser 启动网站,或者是否有类似的 API 可以完成这项工作。请注意,我的实际应用程序始终处于提升状态,因此我无法使用通常的应用程序Process.Start()
, CreateProcess()
or ShellExecute()
您需要使用两个不同的函数系列来完成此任务:
-
CreateProcess
及相关功能。这些可用于启动新流程。您必须提供可执行映像的文件名。
-
ShellExecute
和朋友。这些将使用 shell 的规则将动词应用于文件,以将文件类与可执行文件关联起来。
为了打开 URI,您需要使用其中之一ShellExecute
家庭。为了从提升的进程中以标准用户身份执行,您需要使用其中之一CreateProcess
家庭。
您无法通过单一功能满足这两个要求。因此,您的解决方案是使用其中之一CreateProcessXXX
函数创建一个以标准用户身份运行的进程。该过程依次调用ShellExecuteXXX
。您将把 URI 作为命令行参数传递给CreateProcessXXX
.
因此,您需要创建一个不同的可执行文件作为标准用户启动器。或者重新使用现有的可执行文件,但根据您传递的参数将其切换到启动器模式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)