2009-11-23 159 views
5

由於Vista問世,我的一些.NET應用程序已經開始拋出安全性異常。以管理員身份運行.NET應用程序

我注意到一些應用程序(即我的防病毒軟件,控制面板)有一個小盾牌,當我運行這些應用程序時,管理員權限由我自動從Windows請求。

我知道作爲一個用戶,我可以將應用程序設置爲以管理員身份運行,但這還不夠好,因爲如果應用程序沒有權限運行,它會在我的用戶計算機上崩潰。

有沒有辦法告訴Windows(以編程方式)我希望應用程序以管理權限運行?

回答

16

創建一個應用程序清單,設定requestedExecutionLevel到requireAdminstrator:

舉例(當您添加應用程序清單由VS生成):

<?xml version="1.0" encoding="utf-8"?> 
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> 
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
     <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <!-- UAC Manifest Options 
      If you want to change the Windows User Account Control level replace the 
      requestedExecutionLevel node with one of the following. 

     <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

      If you want to utilize File and Registry Virtualization for backward 
      compatibility then delete the requestedExecutionLevel node. 
     --> 
     <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
     </requestedPrivileges> 
    </security> 
    </trustInfo> 
</asmv1:assembly> 

如果您添加到一個Visual Studio應用程序項目,它將在編譯時嵌入到您的程序集中。

相關問題