windows - 为什么我的 WINVER 4 .exe 不能在 W98SE 下运行?

标签 windows

我需要为运行 Windows 98SE 的遗留系统构建我的应用程序。 (系统涉及特殊硬件,操作系统升级是不可能的。)我的开发环境是Visual C++;该应用程序是 vanilla ANSI C,结果是一个 WIN32 控制台应用程序。

我知道在 Visual Studio 2008 中完全放弃了对旧版本 Windows 的支持,因此我改用 Visual Studio 2005(我的上一代 Windows XP 笔记本电脑上仍然有它)。我有条件编译以避免调用 W98SE 下不可用的 API 函数,并且我知道不使用 Unicode。

注意这一切过去都有效。我过去曾成功构建过 W98SE 可执行文件。不知何故。

我构建的应用程序失败并显示“需要较新版本的 Windows。升级您的 Windows 版本”。

我已经用十六进制编辑器检查了 .exe 文件,WINVER 值(在本例中位于十进制偏移量 288 处)为 4,这是应该的。在正常构建中,即对于现代 Windows 版本,WINVER 值(在本例中为十进制偏移量 296)为 5。那么 WINVER=4 版本怎么可能导致“Expects a newer version”错误被举报?

最佳答案

您很可能已将它与更新的运行时库 MSVCRT.DLL 链接起来。 尝试以下操作:

dumpbin /dependents myfile.exe

如果它显示 MSVCRTnn.DLL,你就有麻烦了。 如果它显示 MSVCRT.DLL(无数字),你应该很好,但仍需谨慎。

可能最简单的解决方案是静态链接运行时库: 在项目属性中,在 C/C++、代码生成下,将运行时库设置为/MT 或/MTd。 如果您使用/MD 或/MDd 或 default,它将动态链接到运行时并可能导致问题。

更改后,“dumpbin/dependents myfile.exe”不应再列出对 MSVCRT.DLL 的依赖,它应该可以正常工作。

关于windows - 为什么我的 WINVER 4 .exe 不能在 W98SE 下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12716520/

相关文章:

c++ - Visual Studio 2008 c++ 应用程序中的静默崩溃

windows - Windows 上是否有 cat 的替代品

windows - 所有版本的 Windows 上的 Win32 透明控件

c++ - 在不创建新进程的情况下在另一个进程中运行可执行文件

windows - 适用于 Windows 的 Git 无法正确处理网络目录

c++ - 在线程之间解析 OpenCV 帧

windows - "findstr"在 VBScript 中总是返回失败

windows - Outlook API : Getting free/busy status

windows - 从 Windows 中的所有子文件夹中删除 CVS 文件夹

c# - 如何在 Windows 机器上制作虚拟扩展屏幕?