0

我们的项目中有一个正在运行的服务,我们需要它来获取注销命令。我们可以通过控制台发送命令,但控制台是一个无法运行的单独程序。它不一定需要停止,但它确实需要获得某种命令。服务中有什么东西可以捕获注销事件吗?

[10/17/12 10:45] - 服务作为本地系统运行。

[10/17/12 12:07] - 我添加了以下方法,但是当我注销或登录计算机时没有得到任何输出,即使我成功地使用此消息写入日志我将再次尝试重建我的解决方案,但想在这里发布,以防我做错了什么。

protected override void OnSessionChange(SessionChangeDescription changeDescription)
{
        WriteToDebugLog(new string[] { "OnSessionChange()",
                                        DateTime.Now.ToLongTimeString() + " - Session change notice received: " + changeDescription.Reason.ToString() + "  Session ID: " + changeDescription.SessionId.ToString(),
                                       "Information" });
        base.OnSessionChange(changeDescription);
}
4

3 回答 3

1

不幸的是,服务不能按用户运行,它们是系统范围的。您可以修改您的服务以检测用户何时注销,但当用户再次登录时它不会再次启动。作为替代方案,您可以使用第二个服务来监控登录活动(使用@rene指出的 OnSessionChanged)并根据该服务启动/停止第一个服务。

这有点棘手,您必须安装第二个服务,我更喜欢使用脚本的更简单的解决方案。

电源外壳

您可以使用两个 PowerShell 脚本,这是启动服务:

Start-Service -name "YourServiceName"

这是停止服务:

Stop-Service -name "YourServiceName"

要配置要执行的此脚本,请查看此处。简而言之,您必须在需要HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System!RunUserPSScriptsFirst时更改策略配置才能运行脚本。

“旧”壳

您不必强制使用 PowerShell,可以使用 shell 命令来启动/停止服务:

sc start YourServiceName

sc stop YourServiceName

请参阅这篇文章,了解如何在注销时执行批处理文件(或命令)。简而言之,您必须HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logoff为注销和HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logon登录添加一个条目(但是有许多不同的地方可以放置您的脚本以进行登录)。

于 2012-10-17T11:52:40.483 回答
0

添加组策略会有所帮助吗?如果您使用的是 Windows 7,请单击开始,编写“组策略”并单击“编辑组策略”选项。从那里,转到用户配置 > Windows 设置 > 脚本(登录/注销)

在这里,您可以添加启动或停止服务的脚本

于 2012-10-17T12:08:43.897 回答
0

您可以让您的服务一直工作并检查特定用户是否已登录,请查看此 SO answer 如何检查已登录用户

https://stackoverflow.com/a/7065660/351383

于 2012-10-17T12:34:48.130 回答