2013-04-29 195 views
0

我有一些设置功能需要管理员权限,其结果由另一个不运行提升的应用程序使用。因此,对于我的单元测试来真实地反映真实情况,我需要调用设置函数,然后以某种方式降低高程,以便可以调用使用设置的函数。有没有合理的简单的方法来做到这一点?它看起来像我应该能够使用UAC模拟和单元测试

CreateRestrictedToken

ImpersonateLoggedOnUser

任何例子在那里?

回答

0

UAC提升仅在流程启动时执行。一旦它开始运行,就不可能(de)提升它。所以,要做你正在尝试的东西,你需要单独的过程。您可以:

  1. 运行您的.exe文件最初不升级,并在需要调用设置函数时启动新的升级进程。未升级的进程可以使用ShellExecute/Ex()"runas"谓词,或使用第三方CreateProcessElevated()实现,以提升状态启动新进程。

  2. 运行您的.exe开始升高,并有它调用设置功能,然后使用CreateRestrictedToken()CreateProcessAsUser()时,它需要调用函数的消费者开始独立非提升的过程。

  3. 动议设置功能到COM对象,然后运行在未提升状态中的.exe并将它使用COM Elevation Moniker时,它需要调用设置功能实例化COM对象在升高的状态。

#1和#2,为了管理方便,你可以有一切在一个单一的.exe文件的代码,只运行自身的新副本传递给它,告诉它的命令行参数的这函数调用,然后立即退出。