2013-04-29 189 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文件的代碼,只運行自身的新副本傳遞給它,告訴它的命令行參數的這函數調用,然後立即退出。