关于如何执行此操作有多种答案,包括如何检测是否安装了 redist 的许多方法。我不会说它们所有都是不完整的,并且在未来的证明方法中不起作用,但我没有成功。所以,我认为最好的办法就是始终安装 redist 并让 Microsoft 来处理它。截至 2020 年 3 月,这将为您的安装程序增加 14MB,但也许在这个高速互联网时代,这已经不是什么大问题了。幸运的是,这很简单,希望这个问题能让你不再关注我所做的所有过时的参考资料和链接。
可以在此处找到有关 Microsoft 的 redist 的说明:Redistributing Visual C++ Files
要将其转换为 NSIS:
在 Visual Studio 安装中找到要重新分发的文件。对我来说这是:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\14.25.28508\vcredist_x86.exe
版本号在未来肯定会发生变化 (14.25.28508),可能就在您安装 Visual Studio 更新时,因此请记住,当您的安装程序中断时,您需要更新该路径。您还需要在 vcredist_x86.exe 和 vcredist_x64.exe 之间进行选择,具体取决于您将应用程序构建为 32 位还是 64 位。
在您的 NSIS 安装文件中添加这样的部分,可能在您进行主要安装之前。它所做的只是将 redist 文件复制到文件系统中,运行它,等待完成,然后删除 redist 文件。
Section "Visual Studio Runtime"
SetOutPath "$INSTDIR"
File "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\14.25.28508\vcredist_x86.exe"
ExecWait "$INSTDIR\vcredist_x86.exe"
Delete "$INSTDIR\vcredist_x86.exe"
SectionEnd
用正确的路径替换你要使用的 redist 文件。
正如所写(以及当前的 redist 程序行为),这将弹出一个对话框,用户必须按照该对话框安装 redist。您可以替换为安静模式:
ExecWait '"$INSTDIR\vcredist_x86.exe" /quiet'
但是我没有得到很好的结果。 YMMV。