C# 注销时停止Windows服务

C# 注销时停止Windows服务,c#,.net,windows-services,C#,.net,Windows Services,我们的项目中有一个正在运行的服务,我们需要它在注销时获取命令。我们可以通过控制台发送命令,但控制台是一个单独的程序,无法运行。它不一定需要停止,但它确实需要获得某种命令。服务中是否存在可以捕获注销事件的内容 [10/17/12 10:45]-服务作为本地系统运行 [10/17/12 12:07]-我添加了以下方法,但当我注销或登录到计算机时,我没有得到任何输出,即使我正在使用此消息成功写入日志,我将再次尝试重建我的解决方案,但希望在这里发布此消息,以防我做错了什么 protected overr

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

[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);
}

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

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

动力壳 您可以使用两个PowerShell脚本来启动服务:

Start-Service -name "YourServiceName"
Stop-Service -name "YourServiceName"
这是为了停止服务:

Start-Service -name "YourServiceName"
Stop-Service -name "YourServiceName"
要配置要执行的脚本,请查看。简而言之,您必须在
HKLM\Software\Microsoft\Windows\CurrentVersion\Policys\System中更改策略配置!运行userpsscriptsfirst
,在需要时运行脚本

“旧”壳 您不必使用PowerShell,可以使用shell命令启动/停止服务:

sc start YourServiceName


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

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


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

您可以让您的服务一直工作,并检查特定用户是否已登录,请查看此内容,然后回答如何检查已登录用户


您是否尝试覆盖。它似乎不起作用。是否可以在登录时运行批处理命令?(我假设这将是一个非常类似的过程,并且可能是我们完成整个产品执行的一个好方法)。是的,对于登录,有很多不同的地方可以放置脚本。最相似的是HKCU\Software\Policys\Microsoft\Windows\System\Scripts\Logon(编辑答案)。好的,我可能需要在登录/关闭时运行一个小程序来处理某些事件,这似乎是处理它的方式。谢谢你提供的信息。在我接受这个回答之前,我会看看这是否有效。嘿,HKCU会攻击所有用户还是只攻击安装程序的用户?HKCU只针对当前用户(安装程序的用户)。您可以使用HKU和用户的SID为其他用户安装。