【问题标题】:.NET Windows service working only with debug binaries.NET Windows 服务仅适用于调试二进制文件
【发布时间】:2012-10-12 12:50:54
【问题描述】:

我安装了一个用 c# 开发的 Windows 服务。该服务已由 Visual Studio 安装程序项目创建的 msi 包安装。当使用来自发布版本的二进制文件安装服务时,它无法启动,并且服务控制台返回以下错误消息:“错误 1053:服务未及时响应启动或控制请求”。当服务与调试二进制文件一起安装时,一切都按预期工作。我已经为服务的构造函数、OnStart 方法、main 方法和服务的主工作线程的 DoWork 方法中发生的每个异常添加了日志。服务的 OnStart 方法几乎立即退出,因为它只是从配置文件中初始化一些变量,然后启动主工作线程。我没有在事件查看器上记录任何异常。我一无所知,我怎么能调试发布二进制文件发生了什么? 谢谢。

【问题讨论】:

  • 在 .NET 中重建服务和安装包。卸载已经安装的服务。然后重新安装您的服务。我过去也遇到过同样的问题。上述步骤通常可以解决问题。您可能还需要重置系统。

标签: .net service


【解决方案1】:

我会更改代码以使服务能够从独立的控制台测试工具运行。毕竟,服务只是管理启动关闭和暂停/恢复的一种奇特方式。然后在服务之外调试您的代码。

如果失败,则将代码分解为多个程序集,看看是否可以更精确地隔离代码模块。然后尝试通过将进入条件记录到受影响的模块来重新创建问题,并在控制台测试工具中重新创建它们

编辑: 顺便说一句。我调试过的复杂企业服务代码中 99% 的服务问题都已使用此模式解决。 @LexLi 正确的其他安全问题无法总是通过将应用程序作为控制台应用程序运行来解决。

此外,我对所有调试问题的回答通常都采用这种模式:

  1. 迭代降低系统(环境)复杂性
  2. 以迭代方式消除代码(测试中)的复杂性
  3. 重复直到问题重现,然后应用源代码或运行时调试器,无论是自定义的还是脱离自身的。

【讨论】:

  • 在当前用户账户下运行的控制台并不能有效定位在本地系统等服务账户下运行的服务的问题。
  • 同意李。事实上,它作为控制台应用程序运行良好。这是我第一次尝试。如果我有必要的分数,我会否决这个答案。
  • @register 您没有提到您确实尝试过。这可能不是一个好的答案,但这是一个很好的建议,恕我直言。如果在控制台模式下运行失败,您可以调试。如果没有,则可能存在文件正确问题。
【解决方案2】:

您可以尝试从进程中删除 MSI,以便更好地确定根本原因。

  1. 在 Release 版本中编译您的项目。
  2. 使用 InstallUtil 将 Release 构建二进制文件安装为 Windows 服务。 http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=vs.80).aspx

尝试启动该服务,看看是否出现同样的错误信息。

如果服务仍然无法启动,请尝试按照KB设置服务调试,

http://support.microsoft.com/kb/824344

由于这是一个 .NET Windows 服务,您可能会了解 WinDbg 和 SOS,

http://www.netfxharmonics.com/2009/01/Learning-WinDBGSOS-and-Advanced-Debugging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-02-13
    • 2011-04-19
    相关资源
    最近更新 更多