我有一些设置功能需要管理员权限,其结果由另一个不运行提升的应用程序使用。因此,对于我的单元测试来真实地反映真实情况,我需要调用设置函数,然后以某种方式降低高程,以便可以调用使用设置的函数。有没有合理的简单的方法来做到这一点?它看起来像我应该能够使用UAC模拟和单元测试
CreateRestrictedToken
和
ImpersonateLoggedOnUser
任何例子在那里?
我有一些设置功能需要管理员权限,其结果由另一个不运行提升的应用程序使用。因此,对于我的单元测试来真实地反映真实情况,我需要调用设置函数,然后以某种方式降低高程,以便可以调用使用设置的函数。有没有合理的简单的方法来做到这一点?它看起来像我应该能够使用UAC模拟和单元测试
CreateRestrictedToken
和
ImpersonateLoggedOnUser
任何例子在那里?
UAC提升仅在流程启动时执行。一旦它开始运行,就不可能(de)提升它。所以,要做你正在尝试的东西,你需要单独的过程。您可以:
运行您的.exe文件最初不升级,并在需要调用设置函数时启动新的升级进程。未升级的进程可以使用ShellExecute/Ex()
与"runas"
谓词,或使用第三方CreateProcessElevated()
实现,以提升状态启动新进程。
运行您的.exe开始升高,并有它调用设置功能,然后使用CreateRestrictedToken()
和CreateProcessAsUser()
时,它需要调用函数的消费者开始独立非提升的过程。
动议设置功能到COM对象,然后运行在未提升状态中的.exe并将它使用COM Elevation Moniker时,它需要调用设置功能实例化COM对象在升高的状态。
#1和#2,为了管理方便,你可以有一切在一个单一的.exe文件的代码,只运行自身的新副本传递给它,告诉它的命令行参数的这函数调用,然后立即退出。