【问题标题】:32-bit windows service do not start on 64-bit windows 732 位 Windows 服务无法在 64 位 Windows 7 上启动
【发布时间】:2011-12-08 16:53:41
【问题描述】:

我有一个 32 位的 windows .exe。它将作为 Windows 服务运行。此 .exe 可作为 windows 2000/xp 32 位版本的服务正常运行。

但是,当尝试在 64 位 Windows 2008 服务器上运行时,它会崩溃。我正在观察两个案例。

1) 如果我在 VC++ 6 上构建应用程序。从事件日志条目看来,Kernel.dll 正在崩溃。

错误的应用程序名称:,版本:,时间戳:0x4e6461c0 错误模块名称:KERNELBASE.dll,版本:6.1.7600.16385,时间戳:0x4a5bdbdf 异常代码:0xe06d7363 故障偏移量:0x0000b727 错误进程ID:0xe2c 错误应用程序启动时间:0x01cc83cb1052e4b3 错误的应用程序路径:C:\Program Files (x86)\\\Admin.exe 错误模块路径:C:\Windows\syswow64\KERNELBASE.dll 报告 ID:4e0693b4-efbe-11e0-a07f-001143e8bb9d

2) 如果我使用 VS2005 32 位构建应用程序,则会显示运行时错误并且事件日志显示 msvscrt.dll 已崩溃。

错误的应用程序名称:,版本:, 错误模块名称:MSVCR80.dll,版本:8.0.50727.4927,时间戳:0x4a2752ff 异常代码:0x40000015 故障偏移量:0x000046b4 错误进程ID:0x34c 错误的应用程序启动时间:0x01cc8c4f2a223426 错误的应用程序路径:C:\Program Files (x86)\\\Admin.exe 错误模块路径:C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCR80.dll 报告 ID:69554d57-f842-11e0-a07f-001143e8bb9d

请帮我解决这个问题。

【问题讨论】:

  • 您是否尝试过调试应用程序?对 0xe06d7363 的 Web 搜索表明这是一个未捕获的 C++ 异常,因此堆栈跟踪应该可以快速显示出问题所在。对 0x40000015 的网络搜索表明这是一个 C 运行时致命退出,因此对其的堆栈跟踪也应该可以快速确定原因。
  • 可能是同样的失败原因,VS2005版本在未处理的C++异常上正确调用了terminate()。使用调试器找出引发异常的原因从来都不是一件难事,没有调试器几乎是不可能的。

标签: windows 64-bit


【解决方案1】:

在解决问题之前,您需要更好地诊断问题,这可能意味着在调试器下执行程序时找到重现问题的方法。一些建议:

由于您的服务是 EXE(而不是在 svchost.exe 下运行的 DLL,它是从 DLL 运行的服务的通用主机进程名称),您应该能够使用 Visual Studio 中的“附加到进程”选项来将调试器附加到它。您可能需要以管理员身份启动 Visual Studio 和/或更改执行服务的用户才能执行此操作。

此外,如果服务在启动后不久崩溃,您可能需要调用 MessageBoxMB_SERVICE_NOTIFICATION 以暂停执行足够长的时间,以便您可以附加调试器。

但是,如果服务在启动过程中在到达MessageBox 之前就崩溃了,您需要 将其构建为控制台应用程序。现在您实际上可以在调试器下启动它,看看发生了什么。

【讨论】:

    【解决方案2】:

    您能否尝试在客户端计算机上安装redistributable package 来运行您的应用程序。

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多