0

我有一个监视其他子服务进程的父服务。当我需要通过进程的 object.Kill() 杀死某个子进程并等待它完成时。然后,我很惊讶这没有以进程名称作为实例名称记录到事件查看器应用程序日志中,并且消息为“服务已成功停止”?当父服务再次启动子服务进程时,我确实在事件查看器的应用程序日志中看到一个条目“服务已成功启动”。

有任何想法吗?

谢谢!

4

3 回答 3

3

应用程序必须自己在应用程序日志中记录事情——使用Process.Kill不是要求服务停止的优雅方式,因此它不会记录它正在停止(因为它已被踢出内存)

于 2012-04-10T17:53:35.817 回答
1

是的,您应该使用服务控制器类来停止或暂停服务,而不是杀死它们。

您将需要添加 using System.ServiceProcess 命名空间。

如果您希望停止依赖项(儿童),您可以使用下面的我来获取您正在寻找的依赖服务并停止适当的子服务:-

ServiceController sc = new ServiceController("%PARENT_SERVICE%"); ServiceController[] scServices = sc.DependentServices;

        foreach (ServiceController dependant in scServices)
        {
            if (dependant.DisplayName == "%CHILD_SERVICE%")
            {
                dependant.Stop();
                dependant.WaitForStatus(ServiceControllerStatus.Stopped);
            }
        }
于 2012-04-10T18:33:39.660 回答
1

尝试使用ServiceController类,而不是使用 Process.Kill() 来控制您的服务。例如,请参见此处的类似问题。要写入 EventLog,请参阅EventLogWriteEntry方法的文档

于 2012-04-10T18:03:12.430 回答