Visual C++可再发行组件重新分发

4
我来自Linux背景,但我想在Windows上提供我的软件版本。用户运行我的程序需要Visual C++可再发行组件。我希望将它作为软件包的一部分提供给他们。
我的担忧是,在未来会有Visual Studio 2008可再发行组件的SP2版本。如果我向用户提供SP1版本,或要求他们自行安装,那么它是否会覆盖未来工具所需的dll文件的较新版本?
有没有任何指令可以给用户,以确保他们不会这样做?
我肯定不希望通过给他们错误的指示来损坏某人的机器或其他应用程序。
除了可再发行的exe文件外,我打算将我的工具作为zip文件提供,他们可以将其解压缩到任何目录中,因此我没有计划提供安装程序。

微软肯定会考虑到可能会有新版本,不会允许原始的可再分发文件覆盖新版本吧? - Mark Rushakoff
4个回答

7
使用VS 2008,运行时会被表现并且会安装在旁边。因此,如果应用程序链接到SP1的运行时,它将仅使用SP1运行时(除非显式地指示应该覆盖Sp1版本的清单)。因此,您可以免受DLL地狱的影响,但需要求用户必须安装SP1可再发行组件包。

你在括号中的最后一条评论是误导性的。SP1 redist与应用程序一起安装和卸载。这不像用户必须单独安装它。 - Drew Hoskins
重点是,即使用户已经安装了SP2,它仍然会被安装。 - Pavel Minaev
@Drew - 你说得对 - 这不是一个有着适当安装程序的应用程序的问题。 - Michael Burr

7
为什么不使用静态链接来避免这个问题呢?

我不知道这是可能的。我的应用程序会有未来的保障吗?我担心将来操作系统的更改可能导致静态链接的运行时不兼容。 - Juan
如果你使用静态链接,那么你使用的库代码将成为你的EXE的一部分,因此只要你未来的操作系统实际上可以运行EXE,你就不会有问题。我有一些应用程序是15年前编写的,但它们仍在运行。 - Rob
好的,这与Linux不同。例如,在Linux上静态链接pthread库可能会使您的应用程序在未来变得不兼容。这是由pthread库和操作系统所需的紧密交互引起的。 - Juan
使用/MT编译。虽然有各种原因可能会使您无法这样做,但通常情况下您应该没问题。 - Drew Hoskins
我认为当你依赖于使用动态链接构建的库时,这是不可取的。当你分发你的应用程序时,那个库仍然需要你一开始试图摆脱的依赖项。 - Andrei Vajna II

3

2

正如人们所说,它们是并排安装的。如果您使用 Visual Studio 的安装程序项目类型,则有一个选项用于包括 CRT 可再发行组件,并且它将为您设置适当的安装和卸载应用程序的方式。

特别地,它们被安装在 \Windows\WinSxS 目录下。

要了解并排工作原理的直觉,请执行以下操作:

cd %systemroot%\winsxs
dir /S msvc*.dll

您将看到其他人在您的计算机上安装的所有版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接