gpt4 book ai didi

c++ - 最新的 Visual Studio 2005 安全更新是否会在热修复客户站点时导致 C 运行时库问题

转载 作者:行者123 更新时间:2023-11-30 01:32:44 26 4
gpt4 key购买 nike

您可能知道,上周大多数机器上自动更新了 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 中分配内存然后在另一个 dll 中取消分配它会怎样?如果使用相同的发布运行时库,通常这会起作用。大约 3 年前,我检查了我们的代码以清理此问题,但我不确定我是否已找到并修复所有问题。
  • 在不同的 dll 中分配/解除分配仍然是个问题吗?现在,在智能指针等时代,必须强制执行这一点。
  • 我可以通过更改 list 来控制我所依赖的运行时库版本吗?

如有任何指点或建议,我们将不胜感激。

更新:我刚刚注意到这个问题 VC++: KB971090 and selecting Visual C Runtime DLL dependencies这非常相似,但我的问题更关心在一个可执行文件中使用两个不同版本的运行时。

最佳答案

应用程序的 list 文件/资源​​中指定的版本号仅指定运行应用程序所需的最低版本。加载程序的默认行为是首先检查 WINDOWS\WinSxS 文件夹中是否存在应用程序 list 中标识的依赖项的相同版本或替代版本,并使用该版本,而不管包含依赖项的私有(private)程序集是否已被加载。与应用程序一起提供。 (参见 http://msdn.microsoft.com/en-us/library/aa375674(VS.85).aspx)。

因此,您的旧二进制文件很可能也会使用最新版本的 Microsoft 运行时库。尝试在完全打补丁的机器上运行应用程序的发布版本(在更新 Visual Studio 之前构建),并使用进程资源管理器查看它加载了哪些 DLL。唯一的问题是您必须在补丁中包含新的运行时可再分发文件。

如果还是不放心,可以试试这里介绍的方法:http://tedwvc.wordpress.com/2009/08/10/avoiding-problems-with-vc2005-sp1-security-update-kb971090/

关于c++ - 最新的 Visual Studio 2005 安全更新是否会在热修复客户站点时导致 C 运行时库问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1238741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com