事件查看器中未记录Process.Kill()

时间:2012-04-10 17:49:47

标签: c# event-viewer

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

有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

请尝试使用ServiceController类,而不是使用Process.Kill()来控制您的服务。有关示例,请参阅类似问题here。要写入EventLog,请参阅EventLogWriteEntry方法

的文档

答案 2 :(得分:1)

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

您需要添加使用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);
            }
        }