【问题标题】:Visual c++ redistributable redistributionVisual c++ redistributable redistribution
【发布时间】:2010-11-15 20:57:05
【问题描述】:

我来自 Linux 背景,但我想在 Windows 上提供我的软件版本。为了让用户运行我的程序,他们将需要 Visual C++ 可再发行组件。我想将它作为包裹的一部分提供给他们。

我担心将来会出现 Visual Studio 2008 Redistributable 的 SP2。如果我向他们提供 SP1,或者让他们自己安装,它会破坏未来工具可能需要的更高版本的 dll 吗?

是否有任何指示让用户确保他们不这样做?

我当然不想通过给他们错误的指令来搞砸他们的机器或其他应用程序。

除了可再发行的 exe,我打算将我的工具以 zip 文件的形式提供,他们可以将其解压缩到他们喜欢的任何目录中,所以我不打算提供安装程序。

【问题讨论】:

  • 微软肯定会考虑到更新版本的可能性,并且不允许原始可再发行组件覆盖更新版本吗?

标签: c++ windows visual-c++ packages


【解决方案1】:

VC++ 可再发行组件旨在并行安装并且可以和平共存。

这是来自MSDN docs about the VC++ redistributables 的页面。 MSDN 的整个部署部分应该具有指导意义。

【讨论】:

    【解决方案2】:

    在 VS 2008 中,运行时会显示出来,并将并行安装。因此,如果您的应用程序链接到 SP1 的运行时,它将仅与 SP1 运行时一起运行(除非清单明确指出应覆盖 Sp1 版本)。

    因此,您可以免受这种类型的 DLL 地狱的影响,以换取另一个(用户必须安装了 SP1 可再发行组件)。

    【讨论】:

    • 您在括号中的最后一条评论具有误导性。 SP1 redist 随应用程序一起安装和卸载。不需要用户单独安装。
    • 关键是即使用户已经有SP2,它仍然会被安装。
    • @Drew - 你是对的 - 对于具有正确安装程序的应用程序来说,这不是问题。
    【解决方案3】:

    你为什么不静态链接并完全避免这个问题?

    【讨论】:

    • 我不知道这是可能的。我的申请会不会受到未来的考验?我担心将来对操作系统的更改可能会导致静态链接的运行时间不兼容。
    • 如果您静态链接,那么您使用的库代码将成为您的 EXE 的一部分,因此只要您未来的 O/S 可以实际运行 EXE,您就可以了。我有 15 多年前编写的应用程序,这些应用程序仍在不断涌现。
    • 好吧,这和linux不一样。例如,在 linux 上静态链接 pthread 库可能会使您的应用程序在将来不兼容。这是来自 pthread 库和操作系统所需的紧密交互。
    • 使用 /MT 编译来执行此操作。有多种原因可能会导致您无法做到这一点,但通常情况下您会没事的。
    • 我认为当您依赖于使用动态链接构建的库时,这是不合适的。当您分发您的应用程序时,该库仍然需要您一开始就试图摆脱的依赖项。
    【解决方案4】:

    正如人们所说,它们是并排安装的。如果您使用 Visual Studio 的安装程序项目类型,则可以选择包含 CRT 可再发行组件,它会正确设置它,以便您与您的应用程序一起安装和卸载。

    特别是,它们安装在 \Windows\WinSxS 目录中。

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

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

    您将看到人们在您的机器上放置的所有版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多