32位Windows服务无法在64位Windows 7上启动

时间:2011-10-16 11:56:15

标签: windows 64-bit

我有一个32位的Windows .exe。哪个将作为Windows服务运行。这个.exe可以作为窗口2000 / xp 32位版本的服务运行。

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

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

Faulting application name: , version: , time stamp: 0x4e6461c0
Faulting module name: KERNELBASE.dll, version: 6.1.7600.16385, time stamp: 0x4a5bdbdf
Exception code: 0xe06d7363
Fault offset: 0x0000b727
Faulting process id: 0xe2c
Faulting application start time: 0x01cc83cb1052e4b3
Faulting application path: C:\Program Files (x86)\\\Admin.exe
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll
Report Id: 4e0693b4-efbe-11e0-a07f-001143e8bb9d

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

Faulting application name: , version: ,
Faulting module name: MSVCR80.dll, version: 8.0.50727.4927, time stamp: 0x4a2752ff
Exception code: 0x40000015
Fault offset: 0x000046b4
Faulting process id: 0x34c
Faulting application start time: 0x01cc8c4f2a223426
Faulting application path: C:\Program Files (x86)\\\Admin.exe
Faulting module path: C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCR80.dll
Report Id: 69554d57-f842-11e0-a07f-001143e8bb9d

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

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

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

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

但是,如果服务在启动期间甚至在达到MessageBox之前崩溃,则需要执行此操作 将其构建为控制台应用程序。现在,您可以在调试器下实际启动,看看发生了什么。

答案 1 :(得分:0)

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