C#
アプリケーションが別のユーザーによって実行されている場合、現在ログオンしているWindowsユーザーを取得する方法でRun as
?
WindowsIdentity.GetCurrent();
常にRun as
ユーザーまたは偽装ユーザーを提供します。ユーザー名とユーザーアカウントの種類にログオンしたウィンドウが必要です。
WMI を使用してログオン ユーザー セッションを取得してみます: "Select * from Win32_LogonSession Where LogonType = 2"
私の知る限り、これを実現できる特殊なケースが 1 つだけあります。オペレーティング システムが非サーバー (Windows XP/Vista/7) で、高速ユーザー切り替えが無効になっている必要があります。
この場合、「現在ログオンしている Windows ユーザー」は単に explorer.exe プロセスの所有者です。
それが適切である場合は、後でサンプル コードを作成して、これを行う方法を示します。
C# でプロセスの所有者を特定するにはどうすればよいですか? (コードサンプルあり)
プロセスの所有者の UserName を取得するにはどうすればよいですか? (より高度なテクニックへのリンク)
いくつかの短いコードがすぐに来ます。
ASP.NET サーバー側コードが偽装コンテキストで実行され、ネットワーク リソースにアクセスできないという問題を解決するために、数年前にUnimpersonatorというクラスを作成しました。
現在の偽装コンテキストをキャプチャし、すべての偽装を元に戻してログオン アカウントに戻り、オブジェクトが破棄されると再度偽装します。
// Running as impersonated account.
using (new Unimpersonator())
{
// Running as logged-in-account
}
// Running as impersonated account again.