現在ログインしているユーザーとは別のユーザーとしてexeを実行できます(「実行」を使用)。
たとえば、Windows に「user1」としてログインし、「User2」の資格情報を使用して「run as」で実行可能ファイルを開始します。
「User2」(プロセスが実行されている)ではなく、「User1」(現在ログインしているユーザー)のユーザー名/IDを取得する方法は?
System.Environment.UserName
つまり、User2 を指定します (予想どおり) 。
WindowsIdentity.GetCurrent()
. _ または、プロパティを介してログインしているユーザー名を取得できEnvironment.UserName
ます。ただし、現在のプロセスを実行しているユーザーであるとは限りません。
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
http://msdn.microsoft.com/en-us/library/system.environment.username.aspxを参照してください
私はこれが古い質問であることを知っていますが、おそらくこの解決策は誰かにとって役立つでしょう.
「QWinsta」または「Query Session」を使用して、現在のセッション ユーザー (アプリを実行したユーザーではありません) を取得できます。
このコードは、「console」パラメーターを使用して QWinsta を実行するプロセスを作成します。これを行うと、次のような結果が得られます。
次に、「StartInfo.RedirectStandardOutput」と「StandardOutput.ReadToEnd()」でその結果をキャッチし、分割して「">console」を検索し、インデックスを変数に保存します。最後に「index+1」でユーザーを取得できます。分割配列で。
セキュリティのために、「Proc.WaitForExit(2000)」を追加して、タスクを停止する前に最大 2 秒待つか、永久に待機し、エラーが発生するのを防ぐために「Proc.ExitCode != 0」を追加しました。
Process Proc = new Process();
Proc.StartInfo.UseShellExecute = false;
Proc.StartInfo.CreateNoWindow = true;
Proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Proc.StartInfo.FileName = @"qwinsta.exe";
Proc.StartInfo.Arguments = @"console";
Proc.StartInfo.RedirectStandardOutput = true;
Proc.Start();
if (!Proc.WaitForExit(2000) || Proc.ExitCode != 0)
{
try { Proc.Kill(); } catch { }
return null;
}
string Resultado = Proc.StandardOutput.ReadToEnd();
string[] Textos = Resultado.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
int Indice = 0;
foreach (string TXT in Textos) { if (TXT == ">console") { break; } else Indice++; }
return Textos[Indice + 1];
注: 「QWinsta」または「クエリ セッション」を使用する場合は、2 つの方法があります。
最初: QWinsta.exe をコピーします。
C:\windows\system32 をアプリのルート フォルダーに配置します (常にコピー オプションを使用することを忘れないでください)。
2 番目: StartInfo を処理するために UserName と Password を提供しますが、管理者の資格情報が必要で、Password は「system.Security.SecureString」でなければなりません。
注 2: すべてのバージョンの Windows に Windows 10 Student N のような QWinsta.exe があるわけではありませんが、他の Windows から「QWinsta.exe」をコピーして使用することができます。
このコードは、Win10 および Win8 でテストされています。