Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当应用程序以不同的用户身份运行时,如何获取当前登录的用户名和帐户类型(管理员、非管理员)_C#_.net_C# 4.0 - Fatal编程技术网

C# 当应用程序以不同的用户身份运行时,如何获取当前登录的用户名和帐户类型(管理员、非管理员)

C# 当应用程序以不同的用户身份运行时,如何获取当前登录的用户名和帐户类型(管理员、非管理员),c#,.net,c#-4.0,C#,.net,C# 4.0,在C语言中,如果应用程序由不同的用户使用运行方式执行,如何获取当前登录的windows用户 WindowsIdentity.GetCurrent;始终以用户或模拟用户的身份提供运行。我只需要windows登录用户名和用户帐户类型。据我所知,只有一种特殊情况可以实现这一点:操作系统必须是非服务器windows XP/Vista/7,并且禁用快速用户切换 在这种情况下,当前登录的Windows用户只是explorer.exe进程的所有者 如果这是合适的,我将在稍后提供一些示例代码来演示如何做到这一点

在C语言中,如果应用程序由不同的用户使用运行方式执行,如何获取当前登录的windows用户


WindowsIdentity.GetCurrent;始终以用户或模拟用户的身份提供运行。我只需要windows登录用户名和用户帐户类型。

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

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

如果这是合适的,我将在稍后提供一些示例代码来演示如何做到这一点

有代码示例

链接到一些更高级的技术


一些简短的代码即将出现。

尝试使用WMI获取登录用户会话: 从Win32_LogonSession中选择*LogonType=2

几年前我编写了一个名为的类,以解决ASP.NET服务器端代码在模拟上下文下运行且无法访问网络资源的问题

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

// Running as impersonated account.
using (new Unimpersonator())
{
   // Running as logged-in-account
}
// Running as impersonated account again.

我很久以前就搜索过关于UAC的类似信息。结果是,这似乎不可能。当前登录的windows用户-不存在。可以有多个用户登录到windows计算机。快速用户切换。终端服务。媒体扩展器。所有这些事情都已经存在了相当长的一段时间。陈雷蒙对此进行了报道。正如他所说,没有一件事是唯一的,所以我们需要知道你试图将这些信息用于什么目的;那么当前的用户就是另一个用户,这也是一个很好的用户。她的另一篇关于它的详细文章:。根据评论,这篇文章甚至适用于快速用户切换,这篇文章实际上建议使用Win32_ComputerSystem中的SELECT UserName,而不是Win32_LogonSession。Win32_计算机系统是我正在使用的。