我们的项目中有一个服务运行,我们需要它来获取注销命令。我们可以通过我们的控制台发送命令,但控制台是一个无法运行的独立程序。它不一定需要停止,但它确实需要获得某种命令。服务中是否有任何可以捕获注销事件的内容?
[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);
}
答案 0 :(得分:1)
不幸的是,服务不能按用户运行,而是系统范围内的服务。您可以修改服务以检测用户何时注销,但在用户再次登录时不会再次启动它。作为替代方案,您可以使用第二个服务来监控登录活动(使用@rene指出的OnSessionChanged)并根据此开始/停止第一个服务。
这有点棘手,你必须安装第二个服务,我更喜欢使用脚本的更简单的解决方案。
您可以使用两个PowerShell脚本,这是为了启动服务:
Start-Service -name "YourServiceName"
这是为了停止服务:
Stop-Service -name "YourServiceName"
要配置要执行的脚本,请查看here。简而言之,您必须在HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System!RunUserPSScriptsFirst
中更改策略配置,以便在需要时运行脚本。
您没有被迫使用PowerShell,可以使用shell命令来启动/停止服务:
sc start YourServiceName
和
sc stop YourServiceName
有关如何在注销时执行批处理文件(或命令)的信息,请参阅this post。简而言之,您必须为HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logoff
添加一个条目以便注销,并HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logon
进行登录(但是有很多不同的地方可以放置脚本进行登录)。
答案 1 :(得分:0)
添加群组策略会有帮助吗?如果您使用的是Windows 7,请单击“开始”,编写“组策略”,然后单击“编辑组策略”选项。从那里,转到用户配置> Windows设置>脚本(登录/注销)
在此处,您可以添加启动或停止服务的脚本
答案 2 :(得分:0)
您可以让您的服务始终有效并检查特定用户是否已登录,请查看此SO答案如何检查已登录的用户