【问题标题】:Distributing the Visual C++ Runtime Libraries (MSVCRT)分发 Visual C++ 运行时库 (MSVCRT)
【发布时间】:2011-01-09 00:29:42
【问题描述】:

我有一个使用 Visual Studio 2008 开发的 ATL/WTL 项目,到目前为止,我一直在与 CRT 库进行静态链接,从而避免了发布它们的需要。但是,我现在需要考虑改用动态库 (DLL) - 为了减少代码的大小,并且因为我想使用出色的 crashrpt 工具(这需要您动态链接到 CRT。)

现在,MS 提供了一个独立的安装程序 (vcredist_x86.exe) 和一个 MSM 包,但这对我没有好处,原因有两个:

  • 我没有使用基于 MSI 的安装程序(我使用的是 InnoSetup)。
  • 我的应用程序安装在受限用户帐户上,而 vcredist_x86.exe 安装程序将无法运行。

因此,我想发送 CRT DLL 并将其安装在我的应用程序文件夹中。现在,您可以这样做,因为我发现 MSVC 库开发负责人 Martyn Lovell 的 following blog post 说:

但是,如果你想 install-applocal,你应该确保 你的应用程序有一个清单, 然后复制整个这个文件夹 进入您的 EXE 目录:

X:\Program Files\Microsoft Visual 工作室 8\VC\redist\x86\Microsoft.VC80.CRT

和其他文件夹,如果您使用超过 阴极射线管。确保包括 清单。

只是想要我追求 - 除非我不明白这部分:

确保您的应用程序具有清单

我的问题是 - 如何创建引用我想使用的 CRT DLL 的应用程序清单?我的项目目前使用的唯一清单信息如下(确保应用使用 v6 的 Common Controls):

/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"

有人可以向我提供有关如何使用 Visual Studio 2008 使用清单魔术的说明吗?我的 Visual Studio VC\redist\x86\Microsoft.VC90.CRT 文件夹中有一个 Microsoft.VC90.CRT.manifest 文件 - 我需要以某种方式使用它吗?

注意:这是与this one 相似但不同的问题。

【问题讨论】:

    标签: c++ visual-c++


    【解决方案1】:

    当您传递 /MD 标志时,Visual Studio 将为您生成正确的清单。

    【讨论】:

    • 因此,除了在“C/C++ -> 代码生成”页面上更改我的“运行时库”设置之外,我不需要做任何其他事情(当然,除了发送 CRT DLL! )?
    • 正确,AFAIK。 (只要您不尝试使用/MDd 部署调试版本)
    • 查看你项目的构建目录,你会看到清单文件。
    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 2016-04-16
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多