2

如果C#应用程序由不同的用户执行,如何获取当前登录的 Windows 用户Run as

WindowsIdentity.GetCurrent();总是给Run as用户或冒充用户。我只想让 windows 登录用户名和用户帐户类型。

4

3 回答 3

1

尝试使用 WMI 获取登录用户会话:“Select * from Win32_LogonSession Where LogonType = 2”

于 2012-08-14T12:39:25.603 回答
1

据我所知,只有一种特殊情况可以做到这一点:操作系统必须是非服务器的(Windows XP/Vista/7)并且禁用快速用户切换。

在这种情况下,“当前登录的 Windows 用户”只是 explorer.exe 进程的所有者。

如果合适的话,我稍后会提供一些示例代码来展示如何做到这一点。

如何在 C# 中确定进程的所有者?(有代码示例)

你如何获得进程所有者的用户名?(链接到一些更先进的技术)

一些短代码即将推出。

于 2012-08-14T12:24:51.610 回答
0

几年前我写了一个类叫Unimpersonator,用来解决ASP.NET服务器端代码在模拟上下文下运行,无法访问网络资源的问题。

它的作用是捕获当前的模拟上下文,还原所有模拟,以便您返回登录帐户,然后在释放对象时重新模拟:

// Running as impersonated account.
using (new Unimpersonator())
{
   // Running as logged-in-account
}
// Running as impersonated account again.
于 2012-08-14T13:13:56.297 回答