Windows中哪个进程是用户特定的?

时间:2011-03-08 06:33:42

标签: c# visual-studio-2010 windows-7 windows-services

我想知道Windows中哪个进程是特定于用户的,我的意思是它是为每个用户登录创建的。我试过explorer.exe但是当你切换用户并登录到新帐户时,它会在我的代码中显示旧的登录名。基本上我只需要在应用程序中记录哪个用户登录。

2 个答案:

答案 0 :(得分:2)

如果您只需知道哪些用户正在使用您的应用,您可以在启动应用时检查Environment.UserName吗?

答案 1 :(得分:1)

我错过了标记,表明您创建了Windows服务。这是一种与常规申请截然不同的动物类型,而您收到的建议不一定可以转让给另一方。

具体来说,我注意到您已标记此问题windows-7。如果您尝试在Windows 7下运行此服务,则需要了解有关Windows服务模型如何从Windows Vista开始大幅更改的一些内容。具体而言,they now run in an isolated session被禁止直接与用户交互。 另请参阅my answer here以获得更好的解释。

基本点是,从Windows服务的角度来看,没有像当前登录用户那样的概念。 Windows服务在其自己的独立会话中运行,并且不隶属于任何特定用户。这就是为什么code you found确定与特定进程关联的用户无法按预期运行Windows服务的原因。标准用户不拥有运行该服务的进程。 (并且根据我的理解您的要求,用应用程序替换您的服务也不是一个可行的选择。As I explain here,用户模式应用程序在特定用户登录时启动,并在用户注销时关闭。 )

另一个问题是,多个用户可以同时登录到一个工作站。 Windows是一个彻底的多用户操作系统,因此您可以期望的最好的方法是枚举当前登录用户的所有NetWkstaUserEnum function将为您提供该列表,但请注意它包括所有类型的登录,包括交互式用户,服务和批量登录。要从C#调用此函数,您需要进行P / Invoke - 您可以在pinvoke.net上找到有关该函数的信息。