我的MFC应用程序通常以管理员权限运行,但是,有一项操作需要管理员权限(激活必须将状态保存到HKLM的软件)。
现在,我创建了两个.exe文件:普通的应用程序和“Activation.exe”,它必须以管理员身份运行,并且在Manifest中有requestedExecutionLevel = requireAdministrator。使用ShellExecute(Activation.exe)按钮启动激活。
但是,两个应用程序共享大量代码,所以我想将两个exe合并到一个exe中。但是,我如何确保代码的特定部分是使用管理员权限执行的?这个方法应该/必须兼容到NT4。
一个想法是使用开关(例如“myapp.exe -activate”)在主exe中集成Activation.exe的功能。一个小的引导程序确保它只能以管理员身份运行(在Manifest中为requireAdministrator)并且只执行ShellExec(myapp.exe -activate)。但这真的是最好的方式吗?
答案 0 :(得分:0)
我不知道这是不是最好的方法(没有人回答)但我现在就这样做了:)引导程序只需要Manifest中的requireAdministrator,并使用开关“/ Activate”执行一个ShellExecute到主执行程序。
答案 1 :(得分:0)
我通常会使用动词ShellExecuteEx
来调用runas
,以管理员身份启动任何可执行文件,即使它显示为asInvoker
。
请注意,在已禁用UAC的系统上,生成的启动可能无法获得管理员权限;我相信这个警告也适用于启动exe表现requireAdministrator
的方法。