我正在一个受到严重限制的环境中开发,但开发人员也可以严格控制。
VCRedist_x86.exe - 一个4Mb可再发行组件 - 并不好玩(传输4小时)。我真的更喜欢重新分发MFC90.dll,msvcm90.dll,msvcp90.dll和msvcr90.dll - 这更像是2Mb。但是,Redistributing Visual C++ Files说:
不支持重新分发没有清单构建的C / C ++应用程序。如果没有清单将应用程序绑定到这些库,则C / C ++应用程序无法使用Visual C ++库。有关更多信息,请参阅Choosing a Deployment Method。
我最初计划将DLL复制到程序的工作目录中似乎没有 在这个勇敢的新世界中工作。
我的下一个猜测是提取将文件填充到WinSxS目录所需的注册表项并自己填充(而不是使用4 meg程序)。
[edit]软件经常更新,因此DLL非常适合静态链接。 [/ edit]
如何成功分发必要的文件但保持开销?
答案 0 :(得分:27)
[我是微软当前的SxS维护者]
我强烈建议反对从清单中删除publicKeyToken属性。 dll的私有部署将完好无损,此属性保持不变。 但是,如果在目标计算机上集中安装了较新版本的CRT,则删除它将阻止您的应用程序从安全更新中受益,因为依赖项将不再匹配。
因此,总结一下:使用默认值嵌入清单是安全的。将CRT清单+ DLL文件直接复制到可执行文件的目录中,不进行编辑。而已。兼容的Win2k +。
答案 1 :(得分:13)
我们使用此:Howto: Deploy VC2008 apps without installing vcredist_x86.exe
基本上
答案 2 :(得分:4)
为编译器属性页中的“运行时库”设置指定/ MT(多线程)。这静态链接到运行时库,因此您不必安装可再发行组件。
答案 3 :(得分:1)
将它们安装为私有程序集。见这里:
http://msdn.microsoft.com/en-us/library/ms235291.aspx
请注意,如果您不需要提供的所有DLL,则可以修改清单文件以仅引用您需要的文件。