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

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

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

具体来说,我注意到你已经标记了这个问题windows-7 。 如果您尝试在Windows 7下运行此服务,则需要了解有关Windows服务模型从Windows Vista开始如何实质性更改的一些内容。 具体来说, 它们现在在隔离的会话中运行,并且被禁止直接与用户交互。 另请参阅我的答案以获得更好的解释。

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

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

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