どのように伝えれば私の工程とのことです管理人はどこですか。
-
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の使用 WellKnownSidType
の BuiltinAdministratorsSid
:
// 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」のための私自身の文字列の比較を行う必要があります。