【问题标题】:Why does my Application not run using the x64 Version of Windows Server 2008?为什么我的应用程序无法使用 x64 版本的 Windows Server 2008 运行?
【发布时间】:2011-02-27 08:41:12
【问题描述】:

我有一个使用少数第三方 DLL 的 Win32 C++ 应用程序,安装在数百台客户机器上。我最近在 Windows XP、Windows Vista x64、Windows 7 x86 以及 Windows Server 2008 x86 上成功测试了 x86 版本的安装。没问题。安装程序 (nullsoft) 安装 VC 2005 和 VC 2008 的可再发行文件,因为我们使用的不同 DLL 都需要这两个文件。

但是对于 Windows Server 2008 x64,x86 和 x64 版本都拒绝启动。 当我启动程序的 x86 版本时,会出现一个对话框:

<myApp> has stopped Working.

EventLog 包含一条消息:

Faulting application myapp.exe, version 1.0.0.0, time stamp 0x4bcb37ca, 
faulting module MSVCR80.dll, version 8.0.50727.4053, time stamp 0x4a594c79, 
exception code 0xc000000d, fault offset 0x0001ce0b, process id 0x29c, 
application start time 0x01cb0329976cfc68.

\Windows\winsxs 包含一个目录

x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_d08d7da0442a985d

使用 sxstrace(首先跟踪,然后解析)创建一个包含不可读字符的 3 字节长度的日志文件。 x64 版本的行为类似。此外,来自第 3 方 Dll 的所有演示程序都可以正常工作。有什么提示吗?

【问题讨论】:

    标签: c++ windows windows-server-2008 side-by-side


    【解决方案1】:

    这看起来不像是并行错误。异常代码为 STATUS_INVALID_PARAMETER,“向服务或函数传递了无效参数。”那没有帮助。您将需要一个调试器,可能带有 Windows 调试符号。让它在第一次机会异常时停止。

    【讨论】:

    • 你是对的:我将 WinDbg.exe 连同源代码和 pdb 文件一起复制到了机器上。然后我可以看到,环境变量 NUMBER_OF_PROCESSORS 没有在这台机器上定义。我的应用程序没有检查 getenv() 的返回值并且在取消引用这个 NULL 指针时崩溃了。所有这些都是在全局对象初始化期间发生的,因此在进入 WinMain 之前以及在创建日志文件之前。感谢您的提示,使用调试器!在这种情况下,我不会想出这个。
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2011-02-27
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多