4

.NET プログラムから、それが通常デスクトップ ユーザーとして実行されているか、「別のユーザーとして実行」メニュー オプション/runas コマンドを使用して別のユーザーとして実行されているかを検出する方法はありますか?

4

1 に答える 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.Managmentdllが必要です

更新: 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 に答える