星期六, 10月 02, 2010

C#程式以系統管理員的身份執行 (UAC)

在Vista或win7中,執行一些會修改到系統的程式時,系統會向你要求管理權限,否則會執行失敗
C#預設則是使用目前的標準權限,所以執行一些指令就會因為權限不足失敗


參考一下MSDN上的說明:
在 Windows Vista 中,使用者的權限是由使用者帳戶控制項 (UAC) 決定。如果您是內建 Administrators 群組的成員,系統會將兩個執行階段存取語彙基元 (Token) 指派給您:標準使用者存取語彙基元及管理員存取語彙基元。根據預設,您會屬於標準使用者角色。若要執行會存取效能計數器的程式碼,您必須先將您的權限從標準使用者提高為系統管理員。您可以在啟動應用程式時進行這項處理,其方式是以滑鼠右鍵按一下應用程式圖示,並指出您想要以系統管理員的身份執行。


解決:
1.在應用程式中,加入一個【應用程式資訊清單檔案 / app.manifest】。
2.修改新加入的app.manifest內容,在requestedExecutionLevel中,把level 的值改為requireAdministrator。


1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" >
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="someExecName" type="win32" />
  <description>Program description</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>


參考:
http://www.dotblogs.com.tw/jjnnykimo/archive/2009/05/08/8346.aspx
http://www.dotblogs.com.tw/dotnetfactory/archive/2008/12/01/6152.aspx

沒有留言:

張貼留言