无法在未修补的Windows 7上使用32位VC ++ 2015

时间:2016-02-27 14:37:31

标签: visual-c++ visual-studio-2015

我们花了相当多的时间让我们的产品在我们迁移到Visual Studio 2015之后在客户的计算机上正常运行,我还有一个问题需要解决。问题是,如果没有打补丁(Windows Update),我无法让任何C ++ 2015可再发行组件安装程序在32位Windows 7上运行。

全文:

我们将解决方案中的所有项目从VS 2013升级到VS2015和.NET 4.5.2,这也迫使我们升级到“Microsoft Visual C ++ 2015 Redistributable(x86 / 64) - 14.0.23506 / 23026”。从VS2010开始,我们之前已经多次进行过这种升级,之前从未失败过。

23506(简称)是VS2015附带的DLL。我们总是发现将DLL安装到我们的安装文件夹中更容易。由于某种原因,这与VS2015(23506)的DLL不兼容。即使与可执行文件放在同一文件夹中,程序也找不到它们。为什么不呢?

然后我运行了VS2015附带的vcredist_xXX.exe,程序运行正常。

但是我想要XCOPY,所以我发现从微软下载了23026,但是那里没有DLL - 只有vc_redist.xXX.exe。不过,我从Windows中的某处复制了DLL - 每个DLL的路径都列在注册表中。顺便说一下,VS2015的文件夹中没有安装两个额外的DLL。 “mfc140.dll”和“mfcm140.dll”。为什么呢?

但是XCOPYing 23026也没有用,甚至没有两个额外的DLL。从23026运行vc_redist.xXX.exe工作正常。

好的,问题解决了,我想。使用vc_redist.xXX.exe而不是XCOPYing。但没有。

最后一个问题是vc_redist.x86.exe(来自23026)和vcredist_x86.exe(来自23506)在32位未经过修补的Windows 7计算机(Windows Update)上运行后都会失败安装。由于我不打算进入的原因,这就是我们必须安装产品的那种机器 - 未修补的32位Windows 7 - 没有办法解决它。 (问题可能存在于64位未修补的Windows上,但我还没有时间查找。)

我该如何解决这个问题?

我试图静态链接C ++运行时并完全删除DLL,但是当你在.NET项目中使用带有C ++包装器的本机C ++时,这似乎是不可能的。其他人已经报告过这个问题,所以不需要在这里讨论。

我尝试过搜索要下载的DLL,或者从安装程序中提取DLL的方法。无论如何,如上所述,我已经尝试过从C:\ Windows下面的某个位置复制它们。不起作用,所以我怀疑我能得到一些可行的DLL。但是,为什么呢?如果有人可以帮我解决这个问题,它可能是解决我们问题的完美解决方案。

我一直在考虑找到获取该安装程序所需的确切Windows补丁(vc_redist.x86.exe),以便在这些糟糕的计算机上运行。如果它只是一个或几个不会破坏这些机器稳定性的KB,那么这可能是可以接受的。

绝对应该工作的可能性是将C ++项目降级到VS2013,这没有这个问题。我真的厌倦了我们总是不得不在我们的开发人员机器上保留两个版本的Visual Studio作为解决某些愚蠢问题的方法,但如果没有其他办法,那么即使在2016年也是如此。

2 个答案:

答案 0 :(得分:1)

找到一个快速简单的解决方法。事实证明,我们只需要更改设置"平台工具集"到#34; Visual Studio 2013(v120)"在所有的C ++项目中,为了使用仍然可以与XCOPY部署一起使用的旧的DLL进行构建。我认为这个设置不会与我们需要的.NET 4.5.2一起使用,但确实如此。 VS2013必须与VS2015一起安装,但我们可以接受它。

如上所述,这是一种解决方法。它没有解决标题中陈述的实际问题。但由于我实际上已经要求解决问题,我将通过这个答案来解决这个问题。

至于实际问题,如果有人感兴趣:我在Visual C ++团队博客上发现了一些博客条目 - "介绍通用CRT"和#34;伟大的C运行时(CRT)重构"。在那里,我不确定。

答案 1 :(得分:1)

我可以通过关注该文章的更新第6步在我的本地PC上解决此问题:https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/

复制20个左右的DLLS文件夹后,它仍然无法正常工作,我必须抓住 ucrtbase.dll和ucrtbased.dll 以及所有常用的 140(来自我的SysWOW64文件夹的mfc,mfcm,vcruntime,msvcp)最后我可以在Windows 7上启动它而无需安装任何补丁!