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

本文关键字:事件 记录 Kill Process | 更新日期: 2023-09-27 18:30:43

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

有什么想法吗?

谢谢!

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

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

不要使用

Process.Kill() 来控制您的服务,请尝试使用 ServiceController 类。有关示例,请参阅此处的类似问题。要写入事件日志,请参阅 EventLog 和 WriteEntry 方法的文档

是的,您应该使用 ServiceController 类来停止或暂停服务,而不是终止它们。

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

如果要停止依赖项(子级),可以使用下面的代码获取要查找的依赖服务并停止相应的子服务。

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