如果C#
应用程序由不同的用户执行,如何获取当前登录的 Windows 用户Run as
?
WindowsIdentity.GetCurrent();
总是给Run as
用户或冒充用户。我只想让 windows 登录用户名和用户帐户类型。
尝试使用 WMI 获取登录用户会话:“Select * from Win32_LogonSession Where LogonType = 2”
据我所知,只有一种特殊情况可以做到这一点:操作系统必须是非服务器的(Windows XP/Vista/7)并且禁用快速用户切换。
在这种情况下,“当前登录的 Windows 用户”只是 explorer.exe 进程的所有者。
如果合适的话,我稍后会提供一些示例代码来展示如何做到这一点。
如何在 C# 中确定进程的所有者?(有代码示例)
你如何获得进程所有者的用户名?(链接到一些更先进的技术)
一些短代码即将推出。
几年前我写了一个类叫Unimpersonator,用来解决ASP.NET服务器端代码在模拟上下文下运行,无法访问网络资源的问题。
它的作用是捕获当前的模拟上下文,还原所有模拟,以便您返回登录帐户,然后在释放对象时重新模拟:
// Running as impersonated account.
using (new Unimpersonator())
{
// Running as logged-in-account
}
// Running as impersonated account again.