.NET プログラムから、それが通常デスクトップ ユーザーとして実行されているか、「別のユーザーとして実行」メニュー オプション/runas コマンドを使用して別のユーザーとして実行されているかを検出する方法はありますか?
1 に答える
4
プログラムを実行したユーザーを取得する方が簡単です。Environment.UserName
またはを使用できますSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
。
それらの違いへのリンクは以下にあります...
現在、ログインしているユーザーを取得することは、もう少しトリッキーです。
私は次の方法を使用します(SOでしばらく前に見つけたと思います)。プロセスの所有者explorer.exe
(ログインしているユーザー) を確認します。
private string GetExplorerUser()
{
var query = new ObjectQuery(
"SELECT * FROM Win32_Process WHERE Name = 'explorer.exe'");
var explorerProcesses = new ManagementObjectSearcher(query).Get();
foreach (ManagementObject mo in explorerProcesses)
{
String[] ownerInfo = new string[2];
mo.InvokeMethod("GetOwner", (object[])ownerInfo);
return String.Concat(ownerInfo[1], @"\", ownerInfo[0]);
}
return string.Empty;
}
上記の方法にはSystem.Managment
dllが必要です
更新: OPのコメントに基づいて、上記の方法は正常に機能します-別のオプションを追加しました:
から最初のユーザー名を取得Win32_ComputerSystem
:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
于 2013-02-26T13:14:11.133 に答える