介绍一下问题的背景。我们的产品附带了 Windows zip 实用程序。此 zip 实用程序由我们的一个产品脚本调用,用于打包一些日志文件。我们的一位客户提出了一个问题,当他们运行我们的脚本(该脚本调用 zip.exe)时,会弹出此信息:“程序无法启动,因为您的计算机缺少 MSVCR71.dll”。我在依赖项查找工具中检查了 zip.exe,果然,我可以看到对 msvcr71.dll 的依赖。客户说,他们可以通过手动将 MSVCR71.dll 文件放在路径 C:\Windows\SysWOW64 中或安装 Windows 7 redists 来解决这个问题。
但是,我创建了一个新的 Windows 2012 VM,没有安装任何其他软件,我可以在路径 C:\Windows\SysWOW64 中看到 msvcr71.dll,并且 zip.exe 成功运行,没有抱怨缺少 dll。所以想检查 msvcr71.dll 是否默认可用?
答案1
Microsoft Visual C++ Redistributable 默认不存在,需要安装。这可能包括msvcr*.dll
,但也包括msvcm*.dll
和msvcp*.dll
,具体取决于应用程序。它有时可能会由其他应用程序安装在客户端计算机上,但您不能依赖它的存在或将要安装的版本。
为了避免这种依赖关系,并且由于客户并不总是同意安装额外的软件包,通常的做法是将使用的 DLL 包含在应用程序的安装文件夹中。这是完全合法的,因为此 Microsoft 软件是“可再发行的”。