日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)C#.NET → 編寫C#程序讓其在Win7 下以管理員權(quán)限運行

      編寫C#程序讓其在Win7 下以管理員權(quán)限運行

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2011/4/22 11:10:34字體大。A-A+

      作者:西西點擊:2587次評論:0次標簽: 管理員權(quán)限

      • 類型:系統(tǒng)優(yōu)化大小:214KB語言:中文 評分:4.4
      • 標簽:
      立即下載

      Vista 和 Windows 7 操作系統(tǒng)為了加強安全,增加了 UAC(用戶賬戶控制) 的機制,如果 UAC 被打開,用戶即使是以管理員權(quán)限登錄,其應用程序默認情況下也無法對系統(tǒng)目錄,系統(tǒng)注冊表等可能影響系統(tǒng)運行的設(shè)置進行寫操作。這個機制大大增強了系統(tǒng)的安全性,但對應用程序開發(fā)者來說,我們不能強迫用戶去關(guān)閉UAC,但有時我們開發(fā)的應用程序又需要以 Administrator 的方式運行,即 Win7 中 以 as administrator 方式運行,那么我們怎么來實現(xiàn)這樣的功能呢?

      我們在 win7 下運行一些安裝程序時,會發(fā)現(xiàn)首先彈出一個對話框,讓用戶確認是否同意允許這個程序改變你的計算機配置,但我們編寫的應用程序默認是不會彈出這個提示的,也無法以管理員權(quán)限運行。本文介紹了 C# 程序如何設(shè)置來提示用戶以管理員權(quán)限運行。

      首先在項目中增加一個 Application Manifest File

      默認的配置如下:

      <?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="asInvoker" uiAccess="false" />
            </requestedPrivileges>
          </security>
        </trustInfo>
      </asmv1:assembly>
      

      我們可以看到這個配置中有一個 requestedExecutionLevel 項,這個項用于配置當前應用請求的執(zhí)行權(quán)限級別。這個項有3個值可供選擇,如下表所示:

      Value
      Description
      Comment
      asInvoker
      The application runs with the same access token as the parent process.
      Recommended for standard user applications. Do refractoring with internal elevation points, as per the guidance provided earlier in this document.
      highestAvailable
      The application runs with the highest privileges the current user can obtain.
      Recommended for mixed-mode applications. Plan to refractor the application in a future release.
      requireAdministrator
      The application runs only for administrators and requires that the application be launched with the full access token of an administrator.
      Recommended for administrator only applications. Internal elevation points are not needed. The application is already running elevated.

      asInvoker : 如果選這個,應用程序就是以當前的權(quán)限運行。

      highestAvailable: 這個是以當前用戶可以獲得的最高權(quán)限運行。

      requireAdministrator: 這個是僅以系統(tǒng)管理員權(quán)限運行。

      默認情況下是 asInvoker。

      highestAvailable 和 requireAdministrator 這兩個選項都可以提示用戶獲取系統(tǒng)管理員權(quán)限。那么這兩個選項的區(qū)別在哪里呢?

      他們的區(qū)別在于,如果我們不是以管理員帳號登錄,那么如果應用程序設(shè)置為 requireAdministrator ,那么應用程序就直接運行失敗,無法啟動。而如果設(shè)置為 highestAvailable,則應用程序可以運行成功,但是是以當前帳號的權(quán)限運行而不是系統(tǒng)管理員權(quán)限運行。如果我們希望程序在非管理員帳號登錄時也可以運行(這種情況下應該某些功能受限制) ,那么建議采用 highestAvailable 來配置。

      關(guān)于requestedExecutionLevel 設(shè)置的權(quán)威文檔請參考下面鏈接:

      Create and Embed an Application Manifest (UAC)

      下面是修改后的配置文件:

      <?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>
      
      配置文件修改后,我們運行應用程序,就會首先彈出這樣一個提示框,點 Yes 后,程序才可以繼續(xù)運行,并且獲得系統(tǒng)管理員的權(quán)限。
      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

      下面再來看看程序如何知道當前運行在系統(tǒng)管理員權(quán)限還是非系統(tǒng)管理員權(quán)限:

              public static bool IsAdministrator()
              {
                  WindowsIdentity identity = WindowsIdentity.GetCurrent();
                  WindowsPrincipal principal = new WindowsPrincipal(identity);
                  return principal.IsInRole(WindowsBuiltInRole.Administrator);
              }
      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

      這段代碼可以用于判斷當前程序是否運行在系統(tǒng)管理員權(quán)限下。如果配置為 asInvoker,在win7 下,這個函數(shù)會返回 false ,如果是 requireAdministrator  則返回 true。

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)