【问题标题】:Can I bundle MSVCRT DLLs with my app without installing the distributable VC++ package我可以在不安装可分发 VC++ 包的情况下将 MSVCRT DLL 与我的应用程序捆绑在一起吗
【发布时间】:2013-11-17 11:09:04
【问题描述】:

我有一个复杂的应用程序,它不能与 CRT 静态链接,但另一方面不需要安装管理员权限(因为它没有做任何需要它的事情)。安装 CRT 使其可以动态链接的正常方法是安装 MS 可分发 CRT,但它需要管理员权限。

我正在考虑简单地将 MSVCRT100 DLL 与可执行文件放在同一目录中以缓解问题,但我不确定这种做法是否有任何缺点,因为在我看到的任何地方都没有宽恕或谴责它。除了遵循静态链接与安装可分发文件的常规做法之外,还有什么理由不这样做?

【问题讨论】:

    标签: c++ visual-studio-2010 winapi msvcrt


    【解决方案1】:

    简短的回答是可以。

    它甚至是微软网站上描述部署应用程序http://msdn.microsoft.com/en-us/library/dd293565.aspx 的选项之一

    复制适当的 MFC 和 C 运行时 (CRT) 库文件 - 例如,对于 x86 平台和 Unicode 支持,从 \Program Files\Microsoft Visual Studio 10.0\VC\redist 复制 mfc100u.dll 和 msvcr100.dll \x86\—然后将它们粘贴到 MFC 项目的 \Release\ 文件夹中。有关您可能必须复制的其他文件的更多信息,请参阅确定要重新分发的 DLL。


    缺点是可再发行包由微软安全修复程序更新。因此,如果部署了安全修复程序,您的应用程序将不会使用它并且可能仍然不安全。我不是一个狂热的粉丝,但它是 winsxs 目录的想法,并且从 Visual 7.0 开始体现,它“帮助”您的应用程序始终使用最佳版本。

    【讨论】:

    • 我们将 MFC DLL 与我们的产品一起提供,并将它们安装到我们的 bin 文件夹中。这允许简单的“复制安装”。
    • "当你部署本地应用程序时,即使你有 DLL 的本地副本,当你的 DLL 被加载时,如果 WinSxS 中存在一个策略来重定向对你的 DLL 版本的请求正在尝试加载到集中版本,您的应用程序将加载更新版本。这是 VC 从使用融合 (WinSxS) DLL 中获得的主要好处。 source
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多