我有一个使用VS2008用C ++编写的Windows服务。我现在想在Windows Server 2008R2上远程调试该服务。但是当我启动服务时,我收到一个应用程序错误说:
错误应用程序名称:MyService.exe,版本:1.99.96.0,时间戳:0x4c87cf49 错误模块名称:MSVCR90.dll,版本:9.0.30729.4926,时间戳:0x4a1743c1 异常代码:0xc0000417 故障偏移:0x0006c955 错误进程id:0x1c08 错误应用程序启动时间:0x01cb4f7fd91b5804 错误的应用程序路径:C:\ Services \ MyService.exe 错误模块路径:C:\ Windows \ WinSxS \ x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4926_none_508ed732bcbc0e5a \ MSVCR90.dll 报告ID:171b562c-bb73-11df-81e0-003048788541
当我在发布版本中启动相同的服务时,一切都很好。该服务是针对Microsoft.VC90.CRT版本9.0.21022.8构建的,我有一个嵌入式清单。
到目前为止我想到的是,由于我的开发机器上安装了VS2010,因此我安装了9.0.30729.4974 redist。并且W2k8服务器确实安装了所需的x.x.x.4926。但是服务器上没有x.x.x.4926的调试版本,所以我认为这可能是问题所在。也许是关于缺少符号的东西?
有没有人有想法?我有点绝望,因为我真的需要调试我的服务以检查严重错误。
电贺, 西蒙
答案 0 :(得分:1)
// MessageText:
//
// An invalid parameter was passed to a C runtime function.
//
#define STATUS_INVALID_CRUNTIME_PARAMETER ((NTSTATUS)0xC0000417L)
这与CRT部署无关,尽管部署调试版本是神秘的。代码只是在_invalid_parameter()函数引发的运行时错误上崩溃。当CRT函数检测到其中一个参数的严重问题时调用它。
它在Release版本中没有发生这一事实并不是一种安慰,Debug构建尤其引人注意,导致像这样的错误,因此你不会遇到偶尔的版本构建问题崩溃。
你需要一个调试器,它会在它变成kaboom之前自动中断。