[英]Getting the current logged in user (FullToken Context)
我有一個問題,那就是...我用右鍵單擊->以管理員身份運行來啟動程序。 這意味着程序正在管理上下文中運行。
WindowsIdentity.GetCurrent().Name;
如果我嘗試以這種方式獲取用戶名,則將以管理員身份啟動啟動程序的用戶。例如“ administrator”,但我需要的是當前已登錄用戶的名稱,例如:bob
有人可以幫我嗎? :)
您可以嘗試使用WMI(System.Management.dll)來獲取explorer.exe
進程的所有者。
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;
}
這依賴於一個事實,即資源管理器進程是單個實例,因此您最終不會讓多個資源管理器進程以不同的用戶憑據運行。
1) Cassia應該能夠為您提供當前登錄用戶的列表,包括RDC。
foreach (ITerminalServicesSession sess in new TerminalServicesManager().GetSessions())
{
// sess.SessionId
// sess.UserName
}
2)WMI(SO 回答 )
Select * from Win32_LogonSession
4)枚舉“ explorer.exe”的所有實例,並使用PInvoke( OpenProcessHandle )獲取所有者。
Process[] processes = Process.GetProcessesByName("explorer");
這有點hacky。 WMI也可以用於此目的。
如果您決定使用使用WMI的解決方案,則最好將winmgmt設置為服務的依賴項。
您可能需要為此使用win32 API。 在此處閱讀有關Window Station和桌面功能的信息: http : //msdn.microsoft.com/zh-cn/library/ms687107%28v=vs.85%29.aspx
另請參閱以下問題: 獲取與桌面關聯的登錄的Windows用戶名
也許您可以以普通用戶身份開始,保存用戶名,然后以編程方式請求提升權限:
所有.NET庫都會為您提供當前上下文中的用戶(在您的情況下為“管理員”)。
如果您嘗試保護代碼安全,則可以考慮閱讀以下內容: .NET框架中的安全性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.