0

我有一个用于某种目的的命令行实用程序。我使用 ShellExecuteEx 函数从 COM DLL 启动此实用程序。当调用 ShellExecuteEx 时,我将 lpVerb 参数指定为“runas”,以便提升实用程序启动。我在启动时从 exe 客户端调用 COM 接口函数。因此,当我启动客户端 exe 时,该实用程序也会启动。我的问题是,由于该实用程序启动提升,它总是要求 UAC 确认提示。我受不了这个,因为在这个过程中不会有人工干预。所以我需要在不显示 UAC 提示的情况下启动该实用程序,但在我启动客户端 exe 时仍会提升。有什么办法可以做到这一点?我更喜欢在实用程序本身内进行一些更改,例如更改清单文件,而不是更改一些系统设置。

4

1 回答 1

1

这不可能按照您描述的方式(清单更改),因为这会违背 UAC 的目的。

但是,您可以使用计划任务。这样,仅需要一次(在创建任务时)与用户交互进行提升。

看看我在这里给出的答案:https ://stackoverflow.com/a/36838171/1871033

您也可以这样做,但没有登录触发器。因此,您将拥有一个不会自行运行但存在的计划任务。然后,您可以在schtasks.exe /run /tn YourTaskName没有提升的情况下使用提升的权限运行任务。

于 2016-05-04T09:26:33.850 回答