确定用户是否已登录的服务

时间:2012-04-04 01:16:23

标签: c# .net windows login

我有一个带有服务和应用程序的.NET应用程序。我要求服务在应用程序未运行时提醒我,反之亦然。这是在1000多台具有不同登录凭据的计算机上运行的(正常登录用户名,即bob,sam,fred用于机器1-PC,2-PC,3-PC)。

我想知道应用程序何时没有运行所以我可以解决它,但是当计算机重新启动并在登录屏幕上等待时,我不断被告知我的应用程序没有运行,但实际上没有人登录。有没有办法查看用户是否已登录?我已经看到了一些黑客,但没有具体/没有优雅的方法来实现这一目标。

这样我就可以看到服务正在运行,但是在有人登录到机器之前,预计应用程序不会运行。

4 个答案:

答案 0 :(得分:0)

如果您的服务坚如磐石(即很少崩溃),我会做的是在服务启动时在某处(文件,注册表,数据库)写一个临时值。

然后,第一次看到运行的应用程序清除标志。

此后,如果未设置标志且应用程序未运行,则存在问题。

这种方法无法解决用户注销的情况,只能解决重启方案,所以我不是100%确定这对你有用,但你只提到重启方案,所以我希望这可能会给你一些想法。

答案 1 :(得分:0)

您可以在应用程序中使用Global\MYUniqueEvent对象并提供必要的安全凭据,以便您的服务可以检查它。

您还可以听取Microsoft.Win32.SystemEvents.SessionSwitch以确定用户正在登录。(我个人没有使用过,但知道它在那里)。请查看示例http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.asp

答案 2 :(得分:0)

这对情侣链接很有用

注意:很有可能存在更好的内置方式 - serverfault可能是一个更好的网站,可以提出有关管理大量机器的问题(除非你用工具进行阴暗的活动)。

答案 3 :(得分:0)

var ntuser = new NTAccount(UserName);

var securityIdentifier = (SecurityIdentifier)ntuser.Translate(typeof(SecurityIdentifier));

var okey = Registry.Users.OpenSubKey(securityIdentifier + @"\Control Panel\Desktop", true); //any key is ok

if (okey != null)
//login
else
//not login