[英]How can I check if my program is really running as an administrator?
我們有一個運行MSBuild腳本的安裝程序,該腳本會在本地計算機帳戶的“個人/我的證書”存儲區中導入一個自簽名證書。 我位於正在運行安裝程序的服務器上的Administrators組中,並且未啟用UAC。 運行腳本並導入證書時,無法在IIS中使用它。 當我嘗試將其分配給網站時,Process Monitor顯示訪問被拒絕的錯誤。
但是,當我以管理員身份明確運行腳本(右鍵單擊並選擇“以管理員身份運行”)時,證書已成功導入 ,並且可以在IIS中使用它。 這對我來說非常奇怪。
如何知道我的腳本/程序是否以管理員身份運行? 我想向安裝腳本添加一個檢查,如果它檢測到它沒有以這種奇怪的“以管理員身份運行”權限運行,則會失敗。 我希望在C#/。NET中有一個答案。
我嘗試使用GetTokenInformation
來獲取高程類型,但這僅在啟用UAC時有效。
使用System.Security.Principal.WindowsIdentity.IsInRole(WindowsBuiltInRole.Administrator)
在常規的“提升”提示符下返回true。
我已經比較了System.Security.Principal.WindowsIdentity.GetCurrent
公開的Owner,User和Group SIDS,並且在常規和“提升”提示下,列表是相同的。
進一步檢查@Rahul發布的線程...,您將找到此鏈接 , 該鏈接包含應執行此操作的代碼(盡管在VB.Net中,但我在下面粘貼了對C#的轉換)。
這是c#中的相關功能(您需要在System.Security.Principal中使用using語句):
public bool IsRunningAsLocalAdmin()
{
WindowsIdentity cur = WindowsIdentity.GetCurrent();
foreach (IdentityReference role in cur.Groups) {
if (role.IsValidTargetType(typeof(SecurityIdentifier))) {
SecurityIdentifier sid = (SecurityIdentifier)role.Translate(typeof(SecurityIdentifier));
if (sid.IsWellKnown(WellKnownSidType.AccountAdministratorSid) || sid.IsWellKnown(WellKnownSidType.BuiltinAdministratorsSid)) {
return true;
}
}
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.