我正在一个受到严重限制的环境中开发,但开发人员也可以严格控制.
VCRedist_x86.exe - 一个4Mb可再发行 - 没什么好玩的(传输4个小时).我真的更喜欢重新分发MFC90.dll,msvcm90.dll,msvcp90.dll和msvcr90.dll - 这更像是2Mb.但是,重新分发Visual C++文件说:
不支持重新分发在没有清单的情况下构建的C/C++应用程序.如果没有清单将应用程序绑定到这些库,则C/C++应用程序无法使用Visual C++库.有关更多信息,请参阅选择部署方法.
我最初将DLL复制到程序工作目录中的计划似乎不适用于这个勇敢的新的清单世界.
我的下一个猜测是提取填充文件到WinSxS目录所需的注册表项并自己填充(而不是使用4兆程序).
[edit]软件经常更新,因此DLL比静态链接更受欢迎.[/编辑]
如何成功分发必要的文件但保持开销?
[我是微软目前的SxS维护者]
我强烈建议不要从清单中删除publicKeyToken属性.dll的私有部署将完好无损,此属性保持不变.但是,如果在目标计算机上集中安装了较新版本的CRT,则删除它将阻止您的应用程序从安全更新中受益,因为依赖项将不再匹配.
因此,总结一下:使用默认值嵌入清单是安全的.将CRT清单+ DLL文件直接复制到可执行文件的目录中,不进行编辑.而已.兼容的Win2k +.
我们使用:Howto:在不安装vcredist_x86.exe的情况下部署VC2008应用程序
实质上
不要在exe文件中嵌入清单.
将C++ DLL及其清单复制到应用程序的目录中.
从所有清单(您和Microsoft的)中删除"publicKeyToken".
如有必要,请更改应用程序清单文件中的版本信息以匹配Microsoft清单文件(反之亦然)