簡體   English   中英

如何檢查我的程序是否真的以管理員​​身份運行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM