1

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

我想知道应用程序什么时候没有运行,以便我可以解决它,但是当计算机重新启动并在登录屏幕上等待时,我经常被告知我的应用程序没有运行,但实际上没有人登录。有没有如何查看用户是否登录?我见过一些技巧,但没有具体/没有优雅的方法来实现这一点。

这样我将能够看到服务正在运行,但在有人登录机器之前不要期望应用程序正在运行。

4

4 回答 4

0

这几个链接可能很有用

注意:很有可能有更好的内置方式 - serverfault 可能是一个更好的站点来询问有关管理大量机器的问题(除非您使用工具进行可疑活动)。

于 2012-04-04T01:38:21.103 回答
0

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

然后,当您第一次看到应用程序运行时清除该标志。

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

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

于 2012-04-04T01:25:34.270 回答
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
于 2013-05-09T09:07:10.137 回答
0

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

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

于 2012-04-04T01:28:07.717 回答