Visual Studio 2015 C++ Redistributable (vcredist_x86.exe) 是否小于 14 MB?

Are there smaller Visual Studio 2015 C++ Redistributable (vcredist_x86.exe) than 14 MB?

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

我的桌面应用程序是一个销售点应用程序,运行在 32 位或 64 位版本的 POSReady 7 (Windows 7) 以及 Windows 10 和 Windows 10 个物联网企业(不是 Windows 物联网核心)在英特尔 x86/x64 兼容 CPU 上。

当我从 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\redist33\vcredist_x86.exe"

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

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

查看文件夹 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist33 我看到三个不同的可再发行文件: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. 此 post 的答案是将特定 Visual Studio DLL 包含到安装程序的组件列表中。 How to avoid Visual C++ Redistributable LARGE file installing?

    由于版权问题,这似乎不是一个可行的替代方案。

  2. 这里是 Microsoft 文档的链接 Redistributing Visual C++ Files as well as Determining Which DLLS to Redistribute which includes an alternative of using merge modules as discussed in Redistributing Components By Using Merge Modules。但是合并模块上的页面说:

    We recommend that you not use merge modules except when you don't have to service your application and you don't have dependencies on more than one version of the DLLs. Merge modules for different versions of the same DLL cannot be included in one installer, and merge modules make it difficult to service DLLs independently of your application. Instead, we recommend that you install a Visual C++ Redistributable Package.

如果我没记错的话,您可以随应用程序而不是安装程序提供所需的 DLL。另一种选择是使用静态链接。

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