You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows服务启动报Error 1064,求助事件日志监控服务故障排查

排查Windows服务Error 1064异常的步骤

Error 1064表明服务的OnStart方法中抛出了未处理的异常,结合你的代码,按以下步骤逐一排查:

1. 修正ServiceName的设置时机

不要在OnStart或Main中动态修改ServiceName,Windows服务的名称需要在构造函数中初始化,系统启动服务时会依赖该名称进行识别,动态修改会引发控制请求处理异常。

修改构造函数:

public wumed()
{
    this.ServiceName = "Wumed";
    // 其他初始化逻辑
}

同时删除OnStart和Main中设置ServiceName的代码。

2. 移除Console.WriteLine调用

Windows服务运行在非交互式会话环境,没有控制台窗口,调用Console.WriteLine会触发IO异常。改用EventLog记录服务状态:

// 构造函数中初始化EventLog
public wumed()
{
    this.ServiceName = "Wumed";
    if (!EventLog.SourceExists("WumedService"))
    {
        EventLog.CreateEventSource("WumedService", "Application");
    }
    EventLog.Source = "WumedService";
    EventLog.Log = "Application";
}

protected override void OnStart(string[] args)
{
    try
    {
        EventLog.WriteEntry("服务已启动", EventLogEntryType.Information);
        EventLogSubscription();
    }
    catch (Exception ex)
    {
        EventLog.WriteEntry($"启动失败:{ex.Message}\n{ex.StackTrace}", EventLogEntryType.Error);
        throw; // 抛出异常让系统捕获,同时留存详细错误日志
    }
}

protected override void OnStop()
{
    EventLog.WriteEntry("服务已停止", EventLogEntryType.Information);
    _watcher?.Dispose();
    base.OnStop();
}

3. 重点排查EventLogSubscription()方法

这是最可能引发异常的核心逻辑,需确认:

  • 读取目标事件日志的权限是否足够(管理员权限通常满足,但要核对日志名称/路径正确)
  • 事件订阅代码是否存在未处理的异常(比如找不到指定日志、事件源不存在、EventLogWatcher初始化错误)
  • 是否存在空引用或参数错误

4. 调试获取详细错误信息

  • 交互式调试:在OnStart开头添加Debugger.Launch();,启动服务时会弹出调试器选择窗口,附加进程后逐行执行,定位报错代码。
  • 查看系统日志:打开事件查看器,在「Windows日志-应用程序」中查找WumedService写入的错误日志,里面包含具体的异常栈信息。

5. 检查服务安装配置

如果通过安装程序部署服务,需确认:

  • 服务启动账户拥有足够权限
  • 安装时配置的服务名称与代码中ServiceName一致

内容的提问来源于stack exchange,提问作者Ferhat Özgür KILIÇ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:35:18