【发布时间】:2016-07-12 11:27:16
【问题描述】:
正如this post 中所建议的那样,如果我为 VS2015 更新 3 安装 VC++ 可再发行组件,我是否可能会破坏在使用以前的 VS2015 更新构建的同一台 PC 上运行的其他软件?同样,如果我在我的版本中坚持使用更新 2,那么当有人为更新 3 安装 redist 时,这是否会在未来某个时候被破坏?
【问题讨论】:
标签: visual-c++ visual-studio-2015 vcredist
正如this post 中所建议的那样,如果我为 VS2015 更新 3 安装 VC++ 可再发行组件,我是否可能会破坏在使用以前的 VS2015 更新构建的同一台 PC 上运行的其他软件?同样,如果我在我的版本中坚持使用更新 2,那么当有人为更新 3 安装 redist 时,这是否会在未来某个时候被破坏?
【问题讨论】:
标签: visual-c++ visual-studio-2015 vcredist
根据New VC Runtime 14.0.24210.0 breaks MFC app built with VS 2015 Update 2 报告的错误描述,U3 可再发行组件确实会破坏使用 U2 或更早版本编译的MFC 应用程序,其中:
MFC,即非静态链接,并且CMFCToolBarButton 或派生类型的对象。来自链接页面:
问题是由 CMFCToolBarButton 类中的新 BOOL 成员 m_bIsDragged 引起的。
因此,更新 2 和 3 之间的内存布局有所不同。
在构造函数中初始化 m_bIsDragged 时,ToolBarButton 后面的(堆栈)内存被覆盖。从 CMFCToolBarButton 派生的所有类也应该出现问题:
CMFCColorMenuButton
CMFCCustomizeMenuButton
CMFCDropDownToolbarButton
CMFCOutlookBarPaneButton
CMFCRibbonGalleryMenuButton
CMFCToolBarComboBoxButton
CMFCToolBarDateTimeCtrl
CMFCToolBarEditBoxButton
CMFCToolBarFontComboBox
CMFCToolBarFontSizeComboBox
CMFCToolBarMenuButton
CMFCToolBarMenuButtonsButton
CMFCToolBarSpinEditBoxButton
CMFCToolBarSystemMenuButton
MFC/CRT DLL 的 AppLocal 部署的应用程序不受影响,因为它们不使用系统范围的安装的副本。
AppLocal 部署在 Introducing the Universal CRT 的“使用通用 CRT 的分发软件”中的第 6 条“更新于 2015 年 9 月 11 日”中进行了描述。
【讨论】: