正如你可能知道的更新到Visual Studio 2005年汽车上周更新的大多数机器上。 此更新包含在Visual C运行时库的新版本。 其结果是,更新后建任何的二进制文件还需要安装在客户端系统的新的可再发行。
见http://support.microsoft.com/kb/971090/
这里是新的可再发行组件安装程序:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2
这是罚款分发新的二进制文件的客户,我将运送与安装新的可再发行组件,它会所有的工作。
不过,我真的很担心我的热修复程序的现有客户的网站,如果他们发现错误的能力。 在这种情况下,通常我只发送固定的DLL或EXE。
但是,如果我这样做,现在,我将不得不把这些客户新的再发行的,现在我将使用两种不同版本的C运行时库在同一个可执行文件。
- 这是个问题吗?
- 可这导致我的应用程序崩溃?
- 如果我在一个DLL中分配内存,然后释放它在另一个会发生什么? 通常情况下这个工程如果使用同一版本的运行时库。 我通过我们的代码去大约3年前清理这件事,但我不能肯定,我已经找到并修复所有出现。
- 在不同的dll分配/解除分配仍然是一个问题吗? 现在,在智能指针等的时代,这是非常有执行此操作。
- 我可以控制它的运行时库版本我改变体现取决于?
任何指针或建议,将不胜感激。
更新:我刚才注意到了这个问题, VC ++:KB971090,选择Visual C运行时DLL依赖这是非常相似的,但我的问题是更关心的是在一个可执行使用两种不同版本的运行时。
在应用程序的清单文件/资源指定的版本号仅指定运行应用程序所需的最低版本。 装载机的默认行为是首先检查WINDOWS \ WinSxS文件夹的相同版本或应用程序清单确定的依赖的替代的版本,并使用该版本无论含相关私有程序集是否已被提供与应用程序。 (见http://msdn.microsoft.com/en-us/library/aa375674(VS.85).aspx )。
所以,机会是你的老的二进制文件也将使用最新版本的Microsoft运行时库的反正。 尝试在完全修补机使用过程Explorer中运行你的应用程序(您更新您的Visual Studio之前建成)的发布版本,看看哪个DLL的加载。 唯一的问题是,你将不得不在您的补丁新的运行时可再发行文件。
如果你还在担心,你可以尝试在这里介绍的方法: http://tedwvc.wordpress.com/2009/08/10/avoiding-problems-with-vc2005-sp1-security-update-kb971090/
是的,你将不必等待太看到使用两个运行时库的问题。
如果你有一个运行时分配内存,并尝试以另一种方式释放它,你的应用程序会崩溃。 这是并将继续是一个问题。
只有什么保留的内存运行时可以跟踪它。 这是IMPOSIBLE为其他运行时知道你多少内存保留。
你可能想读这个 ,是关于与MSVCRT.DLL链接一个真正的好文章。
我听说(仅谣言),如果清单给CRT,只有次版本号不同的两个版本,那么应用程序最终只在系统运行时的新版本。 也就是说,你不要用多CRT显示器遇到问题。
这只是传闻,我很想听听你对这个具体的答案。
另请参阅: 清单中的Visual Studio 2005的安全更新和CRT DLL版本
文章来源: Does the latest Visual Studio 2005 Security Update cause C runtime library issues when hot fixing customer sites