我有一个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
请帮我解决这个问题。
答案 0 :(得分:1)
在解决问题之前,您需要更好地诊断问题,这可能意味着在程序在调试器下执行时找到重现问题的方法。一些建议:
由于您的服务是EXE(而不是在svchost.exe下运行的DLL,这是从DLL运行的服务的通用主机进程名称),您应该能够在Visual Studio中使用“附加到进程”选项将调试器附加到它。您可能需要以管理员身份启动Visual Studio和/或更改服务执行的用户才能执行此操作。
此外,如果服务在启动后很快崩溃,您可能需要使用MessageBox
调用MB_SERVICE_NOTIFICATION
来暂停执行足够长的时间以便附加调试器。
但是,如果服务在启动期间甚至在达到MessageBox
之前崩溃,则需要执行此操作
将其构建为控制台应用程序。现在,您可以在调试器下实际启动,看看发生了什么。
答案 1 :(得分:0)
是否可以尝试在客户端计算机上安装redistributable package来运行您的应用程序。