vc++ 应用程序向后兼容性

Posted

技术标签:

【中文标题】vc++ 应用程序向后兼容性【英文标题】:vc++ application backwards compatibility 【发布时间】:2020-02-03 07:28:14 【问题描述】:

我有一个使用 VS 2019 和最新 SDK 开发的软件。在 Windows 10 操作系统上运行是可以的,但是当尝试在较旧的 Windows 操作系统(7 或 XP)上运行时,它不起作用(应用程序无法正确启动 (0xc0150002))。我已经尝试从 2008 年到 2019 年安装必要的 vc++ 可再发行组件,但它仍然无法正常工作。我尝试使用具有较旧 Windows 操作系统的虚拟机进行测试。

对于如何实现这一点有什么建议吗?或者我是否需要在旧版本的 Visual Studio 中安装和编译我的程序以使其与旧操作系统兼容?

【问题讨论】:

通常这应该有效。但是,您可能会链接一些 Win10 库(或它们的版本,然后您可能必须动态加载 dll...) 对于 Windows XP,您需要在项目属性中使用特殊的平台工具集 IIRC v141 是仍然支持 XP 的最新版本)。 v142 是 VS2019 的最新版本,也适用于 Win7。 我的平台工具集是 v142。 vc++ redist 适用于 2015-2019 年。我还将它安装在 Windows 7 虚拟机上。它仍然行不通。至于XP,我尝试使用VS2015-Windows XP,但出现错误C1083 “它不起作用” 不是问题陈述。 @IInspectable 你能就我如何解决这个问题提供任何建议吗? 【参考方案1】:

您正在寻求找出正在发生的事情的方法。

在Dependencies 中打开应用程序,看看是否可以在那里找到问题。如果失败了,那么Process Monitor 将是我的下一步,但要在其中发现问题并不容易。一定要仔细看。

另一个步骤是尝试在其他操作系统中调试应用程序。你可以在那里安装 Visual Studio,也可以debug the app remotely

【讨论】:

非常感谢@Dialectus 提供这些信息。使用依赖项我发现了 Windows 7 上的问题。至于 XP,我仍在研究其他可能的解决方案。【参考方案2】:

正如上面的 cmets 已经指出的那样,以及在其他关于同一错误的问题的答案中,问题是依赖关系。通常解决方案很简单(安装明显缺失的 SDK/运行时)。

但有时缺少什么并不明显,尤其是在处理依赖于其他第 N 方遗留部件的遗留第 3 方组件时。

错误描述(来自https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55),说

0xC0150002 STATUS_SXS_CANT_GEN_ACTCTX

Windows was unble to process the application binding information. Refer to the system event log for further information.

这并不能解决问题,但提供了一个有价值的线索:系统​​事件日志。

打开 Windows Event Viewer 应用程序并导航到 Windows Logs > Application - 在那里您应该会找到一个错误条目(很可能是最新的),为您提供有关缺少的依赖项或依赖项的详细信息。

例如,尝试加载 ControlCAN.DLL(CAN 总线接口 DLL)的应用程序无法启动,因为该 DLL 依赖于系统中不存在的 VS2008 运行时:

Activation context generation failed for "C:\path\to\program\ControlCAN.dll". Dependent Assembly Microsoft.VC90.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found. Please use sxstrace.exe for detailed diagnosis.

【讨论】:

以上是关于vc++ 应用程序向后兼容性的主要内容,如果未能解决你的问题,请参考以下文章

Visual C++ 2012 可再发行版是不是与 2010 版本向后兼容?

OSX 应用程序的向后兼容性

Android 中的功能向后兼容性

我的OpenGL学习进阶之旅OpenGL ES 3.0和向后兼容性

我的OpenGL学习进阶之旅OpenGL ES 3.0和向后兼容性

Vue.js 路线图和向后兼容性