Visual c++ visualc&x2B+;不使用VCRedist_x86.exe的可再发行文件

Visual c++ visualc&x2B+;不使用VCRedist_x86.exe的可再发行文件,visual-c++,dll,winsxs,Visual C++,Dll,Winsxs,我在一个受到严格限制的环境中开发,但是开发人员也有严格的控制权 VCRedist_x86.exe是一个4Mb的可再发行版本,没有乐趣(传输需要四个小时)。我真的更喜欢重新发布MFC90.dll、msvcm90.dll、msvcp90.dll和msvcr90.dll,这更像是2Mb。然而,他说: 不支持重新分发构建时没有清单的C/C++应用程序。VisualC++库不能被C/C++应用程序使用,而不需要将应用程序绑定到这些库。有关详细信息,请参阅 我最初计划将DLL复制到程序的工作目录中,但似乎没

我在一个受到严格限制的环境中开发,但是开发人员也有严格的控制权

VCRedist_x86.exe是一个4Mb的可再发行版本,没有乐趣(传输需要四个小时)。我真的更喜欢重新发布MFC90.dll、msvcm90.dll、msvcp90.dll和msvcr90.dll,这更像是2Mb。然而,他说:

不支持重新分发构建时没有清单的C/C++应用程序。VisualC++库不能被C/C++应用程序使用,而不需要将应用程序绑定到这些库。有关详细信息,请参阅

我最初计划将DLL复制到程序的工作目录中,但似乎没有成功 在这个充满活力的新世界里工作

我的下一个猜测是将文件填充到WinSxS目录所需的注册表项存储起来,然后自己填充(而不是使用4meg程序)

[编辑]该软件经常更新,因此DLL比静态链接更受欢迎。[/编辑]


如何成功分发必要的文件,同时降低开销?

为编译器属性页中的“运行时库”设置指定/MT(多线程)。这将静态链接到运行时库,因此您不必安装可再发行程序。

将它们作为专用程序集安装。请看这里:

请注意,如果您不需要提供的所有DLL,您可以修改清单文件以仅引用您需要的文件。

我们使用以下方法:

本质上

  • 不要在exe文件中嵌入清单 复制C++ DLL及其清单到应用程序的目录。<李>
  • 从所有清单(您的和Microsoft的)中删除“publicKeyToken”
  • 如有必要,请更改应用程序清单文件中的版本信息以匹配Microsoft清单文件(反之亦然)

[我是微软目前的SxS维护人员]

我强烈建议不要从清单中删除publicKeyToken属性。DLL的私有部署在保留此属性的情况下可以正常工作。 但是,如果目标计算机上集中安装了较新版本的CRT,则删除它将阻止您的应用程序从安全更新中受益,因为依赖项将不再匹配


因此,总结一下:使用默认值嵌入清单是安全的。将CRT清单+DLL文件直接复制到可执行文件的目录中,无需编辑。就这样。兼容Win2k+。

嗨,尤金:你是说如果你用本地CRT/MFC/etc DLL和清单文件部署你的应用程序,影响这些文件的Windows更新会在你的安装目录中找到它们并更新它们?!?!