1. 程式人生 > >C# WinForm判斷Win7下程式是否以管理員身份執行

C# WinForm判斷Win7下程式是否以管理員身份執行

如果程式不是以管理員身份執行,操作本地檔案會提示:System.UnauthorizedAccessException異常

Vista 和 Windows 7 作業系統為了加強安全,增加了 UAC(使用者賬戶控制) 的機制,如果 UAC 被開啟,使用者即使是以管理員許可權登入,其應用程式預設情況下也無法對系統目錄,系統登錄檔等可能影響系統執行的設定進行寫操作。這個機制大大增強了系統的安全性,但對應用程式開發者來說,我們不能強迫使用者去關閉UAC,但有時我們開發的應用程式又需要以 Administrator 的方式執行,即 Win7 中 以 as administrator 方式執行,那麼我們怎麼來實現這樣的功能呢?

我們在 win7 下執行一些安裝程式時,會發現首先彈出一個對話方塊,讓使用者確認是否同意允許這個程式改變你的計算機配置,但我們編寫的應用程式預設是不會彈出這個提示的,也無法以管理員許可權執行。本文介紹了 C# 程式如何設定來提示使用者以管理員許可權執行。

首先在專案中增加一個 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 項,這個項用於配置當前應用請求的執行許可權級別。這個項有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 : 如果選這個,應用程式就是以當前的許可權執行。

highestAvailable: 這個是以當前使用者可以獲得的最高許可權執行。

requireAdministrator: 這個是僅以系統管理員許可權執行。

預設情況下是 asInvoker。

highestAvailable 和 requireAdministrator 這兩個選項都可以提示使用者獲取系統管理員許可權。那麼這兩個選項的區別在哪裡呢?

他們的區別在於,如果我們不是以管理員帳號登入,那麼如果應用程式設定為 requireAdministrator ,那麼應用程式就直接執行失敗,無法啟動。而如果設定為 highestAvailable,則應用程式可以執行成功,但是是以當前帳號的許可權執行而不是系統管理員許可權執行。如果我們希望程式在非管理員帳號登入時也可以執行(這種情況下應該某些功能受限制) ,那麼建議採用 highestAvailable 來配置。

關於requestedExecutionLevel 設定的權威文件請參考下面連結:

相關推薦

C# WinForm判斷Win7程式是否管理員身份執行

如果程式不是以管理員身份執行,操作本地檔案會提示:System.UnauthorizedAccessException異常 Vista 和 Windows 7 作業系統為了加強安全,增加了 UAC(使用者賬戶控制) 的機制,如果 UAC 被開啟,使用者即使是以管理員許可權登

C# WinForm判斷程式是否管理員身份執行,UAC許可權的提權與降權

另外新增2個相關文章(只有提權,沒有提到降低許可權): 歡迎轉載,但最好請註明  Jero 翻譯。 已提權、已經提升許可權的程序——可以理解為使用管理員許可權執行的。未提權、沒有提升許可權的程序——可以理解為使用 非 管理員許可權(既普通使用者許可權)執行的。 UAC機制是由Vista引出,並

在VS中如何讓C#語言編寫的程式自動管理員身份執行

 在Vista或Win7或Win8或Win10系統上exe程式預設不是以管理員身份執行的,它會被UAC(使用者帳戶控制)阻止訪問系統某些功能,如修改登錄檔操作、操作硬碟上的檔案等。但是有時我們確實需要程式在開始執行時就是以管理員身份執行的,這時我們在VS中需進行以下操作:

程式自動管理員身份執行

C#: 1) 開啟Vs2005或vs2008工程,看在Properties下是否有app.manifest這個檔案;如沒有,右擊工程在選單中選擇“屬性”,   選中"Security",在介面中勾選"Enable ClickOnce Security Settings"後

解決win7的ie8瀏覽器管理員身份執行,才不會崩潰的方法

    自己的是win7系統,ie8出現問題,以普通使用者開啟時,會崩潰;以管理員身份執行,才可以。        方案一:    打算以管理員身份登入電腦,這樣電腦的所有軟體都可以以管理員身份執行啦 cmd=>以管理員身份執行=》命令列輸入“net user  ad

判斷程式是否是 管理員 身份執行 visual c++

// 判斷本程式是否是以管理員身份執行的 //BY :暗影行者 // date: 20110716 BOOL ExeIsAdmin() { #define ACCESS_READ 1 #define ACCESS_WRITE 2 // if(g_bIsN

Win7 C# 控制檯程式寫登錄檔被拒,需要管理員身份執行

      最近寫了一個控制檯程式,將程式的相關資訊註冊到登錄檔中。但是執行的時候提示寫登錄檔被拒。電腦的當前使用者沒有管理員的許可權。         如何給控制檯程式賦管理員的許可權呢?    

Win10Visual Studio 2015編譯報“無法註冊程式集***dll- 拒絕訪問。請確保您正在管理員身份執行應用程式。對登錄檔項”***“的訪問被拒絕。”問題解決

原來在Win7下Visual Studio2008跑的好好的程式,現在在Win10下編譯報“無法註冊程式集dll- 拒絕訪問。請確保您正在以管理員身份執行應用程式。對登錄檔項”“的訪問被拒絕。”的錯誤。報錯資訊明面上看是讓你用管理員身份執行Visual Studio,然後開啟工程編譯就好了。

C#預設管理員身份執行程式

Vista 和 Windows 7 作業系統為了加強安全,增加了 UAC(使用者賬戶控制) 的機制,如果 UAC 被開啟,使用者即使是以管理員許可權登入,其應用程式預設情況下也無法對系統目錄,系統登錄檔等可能影響系統執行的設定進行寫操作。這個機制大大增強了系統的安全性,但對應用程式開發者來說,我們不能強迫

Win7 管理員身份執行批處理檔案,切換JDK版本

Win7下 切換JDK的批處理命令 1. 批處理檔案(必須以管理員身份執行)內容如下 @echo off rem --- Base Config 配置JDK的安裝目錄 --- :init set JAVA_HOME_1_8=C:\Program Files\Java\jdk1.8 set JAVA_HO

windows 7程式 請求管理員許可權執行

  windows 7 對安全方面的管理要比XP嚴格多了,但是如果你寫了一個程式需要以管理員許可權執行怎麼辦呢?  就像這樣 ok,我也是參考了很多其他人的文章 比如: 在visual stuido 2010 中的設定就是這個樣子的 當你除錯時會出這樣的對話

C#如何管理員身份執行程式

  在使用winform程式獲取呼叫cmd命令提示符時,如果是win7以上的作業系統,會需要必須以管理員身份執行才會執行成功,否則無效果或提示錯誤。      比如在通過winform程式執行cmd命令時,某些情況下如果不是以管理員身份執行,則會提示命令無效。    

如何在DOS管理員身份執行命令?

管理員 info -s ont window 命令 com 管理 轉換 原創 普通User的DOS窗口: 以管理員身份運行的DOS窗口: 轉換(Windows10系統下): 13:11:55 2018-10-18如何在DOS下以管理員身份執行命令?

c# 設定管理員身份執行開發的軟體 visual studio 2017

用C#開發的軟體需要獲得管理員許可權對C盤檔案進行更改。此文更改C#的manifest檔案以達到雙擊執行開發出的軟體時提示以管理員身份執行的效果。 1.建立manifest檔案。 右擊專案-> 可在此更改檔名(字尾不能更改)-> 2.開啟新建立的manifes

win7/10中管理員身份執行bat指令碼時,獲取當前檔案所在目錄

此命令適用於bat雙擊正常開啟,以管理員開啟閃退的情況 以下為轉載,地址http://blog.chinaunix.net/uid-27000874-id-3224772.html 知道windows的bat指令碼很強大,但是具體命令向來很少接觸,今天在win7上執行自己

解決IDM“警告:您在管理員身份執行IDM,在該模式,IDM無法接管瀏覽器的下載事件”的問題。

執行,輸入gpedit.msc確定,把如圖的那個改成“已啟用” 造成該問題的原因是有些電腦系統內建管理員賬戶Administrator,所以開啟所有軟體都是以管理員許可權,跳過了UAC(使用者賬戶控制),如上修改組策略後,即可解決。

[技巧.Dotnet]輕鬆實現“強制.net程式管理員身份執行”。

使用場景: 程式中不少操作都需要特殊許可權,有時為了方便,直接讓程式以管理員方式執行。 (在商業軟體中,其實應該儘量避免以管理員身份執行。在安裝或配置時,提前授予將相應許可權。) 做法: 以C#專案為例: 1) 選擇專案,右鍵 -> 屬性 -> 安全性 -&

判斷程序是否"管理員身份執行"

判斷程序是否是“以管理員身份執行”: /// @brief 判斷程序是否以管理員身份執行 /// @param[in] dwProcessId : 程序ID /// @param[in] b

VS2017中設定程式管理員身份執行

    在Windows程式設計中,執行程式時出現錯誤,錯誤返回值為5,這表示程式執行的許可權不夠,在Visual Studio 2017 中設定程式以管理員身份執行的步驟是:直接專案右鍵---屬性--

win7 批處理檔案預設管理員身份執行及清除IE快取指令碼

1、指令碼預設以管理員身份執行 在win7中,批處理檔案有時需要以管理員身份執行,如清除 IE 快取的指令碼,若不使用管理員許可權,常常會卡死。 批處理檔案以管理員身份執行很簡單,可惜,竟然很長時間不知道怎麼去設定,原來總是在“相容性”裡設定以管理員身份執行,可是批處理檔案