どのように伝えれば私の工程とのことです管理人はどこですか。

StackOverflow https://stackoverflow.com/questions/509292

  •  21-08-2019
  •  | 
  •  

質問

思表示一部のエUI要素が行われている管理者としてではないか、どのように目のVisual Studio2008用テーブルのディスプレイ管理者"のタイトルバーを実行する場合としてのadmin.どのようにいかも。

役に立ちましたか?

解決

技術的には、だいた場合には、速やかにこれを会員の現地管理者 , きますので、その セキュリティ識別子(SID) 現在のユーザーの User 財産WindowsIdentity クラス, のように、それをしっかり静 GetCurrent 方法 取得し、現在のWindowsユーザ:

WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

string sid = windowsIdentity.User.ToString();

User 性を返しますSIDのユーザー 多数の定義済みの値を様々なグループやユーザー.

していないかを確認する のSIDのパターンを示すのではローカルの管理者アカウントでも知られるSID):

S-1-5-{その他のSIDパーツ}-500

やまない文字列を構文解析に利用できます SecurityIdentifier クラス:

// Get the built-in administrator account.
var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, 
    null);

// Compare to the current user.
bool isBuiltInAdmin = (windowsIdentity.User == sid);

しかし、思い 本当に 知りたい場合、現在のユーザーの管理者 グループ を行います。ことができますSIDの使用 WellKnownSidTypeBuiltinAdministratorsSid:

// Get the SID of the admin group on the local machine.
var localAdminGroupSid = new SecurityIdentifier(
    WellKnownSidType.BuiltinAdministratorsSid, null);

その後で確認することができ Groups 財産WindowsIdentity ユーザのユーザがユーザーが会員の管理者グループはこのように:

bool isLocalAdmin = windowsIdentity.Groups.
    Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
    Any(s => s == localAdminGroupSid);

他のヒント

私はこれは良いシンプルな仕組みだと思います。

using System.Security.Principal;

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);

ここでそれを行うには1つのライナーです。

using System.Security.Principal;

static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);

私はそれが重要な私が上記casperOneの答えあたりのWellKnownSidType.BuiltinAdministratorsSidを使用しようとしていた難易度に注意することは感じました。 WellKnownSiDType MSDN に、BuiltinAdministratorsSidは、「管理者アカウントに一致するSIDを示します。」だから私はcasperOneのコードが動作することを期待し、それはおそらく、いくつかの環境ではありませんよね。残念ながら、それは、.NET 2.0(レガシーコード)と私のWindows 2003でませんでした。これは、実際にに応じて、この記事では、SIDである、S-1-5-32-544を返さ管理者のためののグループの。このため、比較は私のために失敗します。私は(それキロバイト243330が「21」は上記参照のブログにはないにもかかわらず、含まれることを示す)とendswith「500」STARTSWITH「S-1-5-21」のための私自身の文字列の比較を行う必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top