2011-05-10 186 views
25

我知道有一些類似的問題。 但我只想檢查一件事。C#管理員權限 - 檢查

我只是想知道,如果程序以管理員身份運行。 我想檢查一下,因爲我想編輯一些安全文件。 用戶不必是管理員。我只想知道我的應用程序是否有權編輯某些以管理員身份運行時可編輯的受保護文件。

+2

可能重複作爲管理員?](http://stackoverflow.com/questions/509292/how-can-i-tell-if-my-process-is-running-as-administrator) – 2011-05-10 16:32:03

+1

我只是用Google搜索這個問題,它看起來像我在3年前問過它。很高興知道。感謝Google。 – Hooch 2015-04-22 09:57:22

回答

55

這將返回一個bool有效

using System.Security.Principal; 

bool isElevated; 
using (WindowsIdentity identity = WindowsIdentity.GetCurrent()) 
{ 
    WindowsPrincipal principal = new WindowsPrincipal(identity); 
    isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator); 
} 
+0

+1,因爲它甚至可以在Linux(Mono)上運行。以root身份/通過sudo運行時爲您提供真實性。默認用戶爲false。 – MrPixelDream 2015-12-20 15:50:45

+0

我認爲你應該處理'identity',因爲它是'IDisposable'。 – Harry 2017-02-05 07:27:07

+0

@Harry我認爲你做的答案之前的評論被編輯包'的'using'阻止identity'? – Manuzor 2017-08-12 08:42:36

5

這裏的@採用了最新的C#atrljoe的回答變成了一個襯墊:

using System.Security.Principal; 

static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator); 
的[我怎麼能知道我的進程正在運行
+5

這是醜陋的。對不起。但是,真的,你應該縮短一切。將它作爲4行並使其發揮作用是可行的。 如何連調試一個班輪? – Hooch 2015-11-13 23:21:12

+0

我相信只要它很清楚,簡潔就是一種成功。 – 2015-11-15 01:49:16

+2

有趣...我發現這比擴展版本更容易閱讀。這有一個明確的調用層次結構,但要理解代碼分解成不同的變量,我需要在心裏執行它。 – bart 2015-12-06 20:51:26