0

我有一个使用 C 和 C++ 编写的 Visual Studio 2015 构建的 Windows x86 32 位桌面应用程序,使用 MFC 框架作为用户界面。对于安装程序,我使用带有 NSIS 脚本的 NSIS 编译器来生成用于安装应用程序的安装 .exe,该应用程序由构建创建的大约 10 个不同的组件、.exe 和 .dll 组成。

我的桌面应用程序是一个销售点应用程序,它在 32 位或 64 位版本的 POSReady 7 (Windows 7) 以及英特尔 x86/x64 兼容 CPU 上的 Windows 10 和 Windows 10 IoT Enterprise(不是 Windows IoT Core)下运行。

当我从 Visual Studio 2005 更改为 Visual Studio 2015 时,我对安装可执行文件的更大尺寸感到震惊,从大约 8 MB 的大小到 16 MB 的大小。大小差异似乎是由于我在桌面应用程序安装程序中包含的 Visual Studio 2015 C++ Redistributable。

NSIS 脚本有以下几行:

# The location of the Visual Studio 2005 C++ Runtime Redistributable depends on the version of
# Windows being used to build the application. Beginning with Windows 7 there are now two different
# folder hierarchies for installed programs.
File "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\1033\vcredist_x86.exe"

ExecWait '"$INSTDIR\vcredist_x86.exe" /q:a /c:"msiexec /i vcredist.msi /qb!"'   #dialog with no cancel

当我使用 Visual Studio 2015 编译桌面应用程序并使用包含注释掉的File指令运行 NSIS 脚本时,生成的安装程序的大小为 2,220 KB。vcredist_x86.exe当我取消注释File包含 的指令vcredist_x86.exe时,生成的安装程序的大小为 16,140 KB。

查看文件夹,C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist\1033我看到三个不同的可再发行组件:vcredist_arm.exe大小 2,639 KB、vcredist_x64.exe大小 14,957 KB 和vcredist_x86.exe大小 14,130 KB。

是否有其他小于 14 MB 的 Visual Studio 2015 可再发行组件?

或者我可以使用其他方法来提供vcredist_x86.exe不需要将其包含在我的应用程序安装程序中的位置?一种不同的方法需要与当前解决方案一样自动,即安装应用程序组件然后启动 Visual Studio 2015 可再发行安装程序。

笔记

  1. 这篇文章的答案是将特定的 Visual Studio DLL 包含到安装程序的组件列表中。 如何避免安装 Visual C++ Redistributable LARGE 文件?

    由于版权问题,这似乎不是一个可行的选择。

  2. 以下是 Microsoft 文档Redistributing Visual C++ Files以及Determining which DLLS to Redistribute的链接,其中包括使用合并模块的替代方法,如通过使用合并模块重新分发组件中所述。但是合并模块上的页面说:

    我们建议您不要使用合并模块,除非您不必为您的应用程序提供服务并且您不依赖多个版本的 DLL。同一 DLL 的不同版本的合并模块不能包含在一个安装程序中,合并模块使得独立于您的应用程序服务 DLL 变得困难。相反,我们建议您安装 Visual C++ Redistributable Package。

4

1 回答 1

3

如果我没记错的话,您可能会在您的应用程序而不是安装程序中提供所需的 DLL。另一种选择是进行静态链接。

这些方法将导致整体尺寸小得多,但除非您这样做,否则永远不会更新依赖项以进行修复。这可能会破坏交易,也可能不取决于具体情况。

于 2020-07-20T19:35:23.203 回答