C#程式以管理員權限運行

來源:互聯網
上載者:User

標籤:程式開發   方法   資源   連結   建立   static   ica   ide   title   

在Vista 和 Windows 7 及更新版本的作業系統,增加了 UAC(使用者賬戶控制) 的安全機制,如果 UAC 被開啟,使用者即使以管理員權限登入,其應用程式預設情況下也無法對系統目錄、系統註冊表等可能影響系統正常啟動並執行設定進行寫操作。這個機制大大增強了系統的安全性,但對應用程式開發人員來說,我們不能強迫使用者去關閉UAC,但有時我們開發的應用程式又需要以 Administrator 的方式運行,如何?這樣的功能呢?

下面示範 C# 程式如何?提示使用者以管理員權限運行。

本例以WinForm程式示範,建立一項目產生後進行相應修改:

方法一:通過 System.Diagnostics.Process.Start() 方式啟動:

實現方法: 修改預設產生的Program檔案,修改後的代碼如下:

由於已經在代碼上做了注釋,所以不再詳細說明;

static class Program    {        [STAThread]        static void Main()        {                        Application.EnableVisualStyles();            Application.SetCompatibleTextRenderingDefault(false);            /**             * 目前使用者是管理員的時候,直接啟動應用程式             * 如果不是管理員,則使用啟始物件啟動程式,以確保使用管理員身份運行             */            //獲得當前登入的Windows使用者標示            System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();            System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);            //判斷當前登入使用者是否為管理員            if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))            {                //如果是管理員,則直接運行                Application.Run(new Form1());            }            else            {                //建立啟始物件                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();                startInfo.UseShellExecute = true;                startInfo.WorkingDirectory = Environment.CurrentDirectory;                startInfo.FileName = Application.ExecutablePath;                //設定啟動動作,確保以管理員身份運行                startInfo.Verb = "runas";                try                {                    System.Diagnostics.Process.Start(startInfo);                }                catch                {                    return;                }                //退出                Application.Exit();            }        }    }

 

效果:由於是通過System.Diagnostics.Process.Start() 方式外部調用啟動,所以直接通過VS運行時,是不會提示VS也需要管理員權限,只有程式本身需要管理員權限,與產生應用程式的程式不同。這點是和方法二實現的主要不同之處。

本文地址:http://www.cnblogs.com/Interkey/p/RunAsAdmin.html

方法二:通過添加應用程式資訊清單檔案:

在 項目 上 添加新項 選擇“應用程式資訊清單檔案” 然後單擊 添加 按鈕

添加後,預設開啟app.manifest檔案,將:

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

修改為:

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

然後開啟 項目屬性 ,將 應用程式 標籤頁中的 資源 中的 清單 修改為建立的 app.manifest。

重建項目,再次開啟程式時就會提示 需要以管理員權限運行。

需要注意的是:如果在VS中 啟動調試 的話,就會提示 此任務要求應用程式具有較高的權限。如:

選擇 使用其他憑據重新啟動 即可。

方法三:直接修改程式檔案的屬性

右擊程式檔案,在彈出的屬性對話方塊中的 相容性 標籤頁中

勾選“以管理員身份運行此程式”即可。

 

 

 

判斷程式是否以管理員身份運行

 需要添加命名空間:

using System.Security.Principal;

    /// <summary>    /// 確定當前主體是否屬於具有指定 Administrator 的 Windows 使用者組    /// </summary>    /// <returns>如果當前主體是指定的 Administrator 使用者組的成員,則為 true;否則為 false。</returns>    public static bool IsAdministrator()    {        bool result;        try        {            WindowsIdentity identity = WindowsIdentity.GetCurrent();            WindowsPrincipal principal = new WindowsPrincipal(identity);            result = principal.IsInRole(WindowsBuiltInRole.Administrator);            //http://www.cnblogs.com/Interkey/p/RunAsAdmin.html            //AppDomain domain = Thread.GetDomain();            //domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);            //WindowsPrincipal windowsPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;            //result = windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);        }        catch        {            result = false;        }        return result;    }

 

 

 

如果有興趣還可以繼續查看下面的連結:

http://www.cnblogs.com/Lemon_s/archive/2011/07/28/2119222.html

http://www.cnblogs.com/shenchao/archive/2013/03/05/2944660.html

希望能幫到大家~~~

C#程式以管理員權限運行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.