使用 InstallShield Lite 安静地安装 VC_REDIST.X86
Installing VC_REDIST.X86 quietly using InstallShield Lite
我一直在努力尝试使用 InstallShield lite 安装需要 C++ 可再发行组件 (2017 x86) 的软件。
首先,我定义了一个先决条件以包含 C++ 可再发行组件。当用户尝试安装时,用户界面总是会出现。现在这不是一个真正的问题,但是,如果可再发行组件已经安装或有更新的版本,那么它将失败并显示一条失败消息,并且它会询问用户是否要继续或中止安装。如果他选择继续,则软件安装正常。这不是很用户友好。
尽管使用了正确的命令行开关,即 /q /norestart,也会发生这种情况。如果您在命令提示符下手动执行此操作,它会按预期运行。换句话说,它会安装它,或者失败,因为它已经安装但什么也没告诉用户。这是它应该工作的方式。
现在我尝试在 installshield 脚本末尾将此作为自定义操作执行,但安装似乎在某些机器上挂起,在其他机器上出现其他错误。
现在我能提供的唯一线索是,如果我创建了一个 MSI 安装,那么它永远不会提示。然而,对于 setup.exe 安装,它的行为与上述相同。我只有在安装 64 位应用程序时才能成功安装 msi。永远不要使用 32 位应用程序。
有人可以指导我做错了什么吗?
谢谢
VCRedist: This C / C++ runtime (in various versions and flavors) is a pain indeed. I decided to write something up a while back to try to summarize a few things:
Wix per user installer to detect the Visual C++ 2015 Redistributable (please skim at least - not great, better than nothing I hope - deals mostly with detecting the presence of the runtime).
合并模块:Installshield Lite是否支持合并模块?如果是这样,您可以使用合并模块而不是 VCRedist_x64.exe
文件来安装 VCRedist。这对于 UWP 应用程序(通用 CRT)来说是不够的,如这些 links:
中所解释的
Do read the links directly above - they are quick reads.
批处理文件:另一种选择是保留 VCRedist_x64.exe
将文件与您的主要设置分开,并将您的 MSI 和 VCRedist_x64.exe
压缩到 ZIP 存档中,然后放入 Install.cmd
那里的批处理文件将首先安装 VCRedist 然后你的 MSI 文件?不太整洁 - 一个人不得不承认。我认为您可以制作一个自动调用它的自解压存档,但我已经很久没有这样做了。
只是来自下面 link 的 模拟批处理文件(未测试):
REM 1. Install VCRuntime
vc_redist.x64.exe /install /quiet /log "%temp%\Install_vc_redist_2017_x64.log"
REM 2. Install MSI
msiexec.exe /i MySetup.msi /L*v C:\MySetup.log /QN
不确定安全修复程序之类的东西。 运行 Windows 之后更新?
安全修复和Link下载:这个运行时有很多安全修复,它是通常安装在大多数机器上,坦率地说,我只是 link 下载最新版本,并让人们自己安装它作为先决条件,而不是在我的设置中捆绑一个过时的版本,但事实并非如此足够了,除非你的包仅供公司使用(在这种情况下,他们更愿意安装自己的运行时并完全控制)。
一些Links(好找):
- Command lines to install and uninstall silently the VC++ 2017 Redistribuables (
installation command lines, untested by me
)
- The latest supported Visual C++ downloads(请勾选)
- Microsoft Visual C++ 2017 Resitributable Package (x86)(请务必阅读)
- How to prevent vc_redist.x##.exe (VS2017) from ambiguously failing due to pending reboot?
- Visual Studio 2017 Installer Project - include VC++ 2015 Redistributable
- There is always the WiX toolkit
- Distributable Code for Microsoft Visual Studio 2017 (Includes Utilities, Extensibility, and BuildServer Files)
- Mailbag: How to perform a silent install of the Visual C++ 2010 redistributable packages
感谢您的全面回答。我相信它会帮助很多人。我发现 运行 vc_redist.x86 在安静模式下的命令行确实总是可以正常工作。换句话说,如果没有安装,它将被安装。如果它已经安装或安装了更高版本,它只会 return 没有任何抱怨。使用 InstallShield Lite 2018 不是这种情况(所有以前的版本都一样)。
但是,正如我发现的那样,有一个简单的解决方案可以使其正常工作。需要做的就是在 PRQ 文件的行为部分中包含条目 Hidden="1"。所以现在会有一个看起来像这样的条目:
<behavior Hidden="1" Failure="4" Reboot="2"/>
这解决了问题。它不再与具有自己的 GUI 的 installshield 安装程序分开运行,而是消息现在出现在 installshield 的菜单中,并且它的运行就像您在命令行 运行 它一样。没有更多的错误。
我一直在努力尝试使用 InstallShield lite 安装需要 C++ 可再发行组件 (2017 x86) 的软件。 首先,我定义了一个先决条件以包含 C++ 可再发行组件。当用户尝试安装时,用户界面总是会出现。现在这不是一个真正的问题,但是,如果可再发行组件已经安装或有更新的版本,那么它将失败并显示一条失败消息,并且它会询问用户是否要继续或中止安装。如果他选择继续,则软件安装正常。这不是很用户友好。 尽管使用了正确的命令行开关,即 /q /norestart,也会发生这种情况。如果您在命令提示符下手动执行此操作,它会按预期运行。换句话说,它会安装它,或者失败,因为它已经安装但什么也没告诉用户。这是它应该工作的方式。 现在我尝试在 installshield 脚本末尾将此作为自定义操作执行,但安装似乎在某些机器上挂起,在其他机器上出现其他错误。 现在我能提供的唯一线索是,如果我创建了一个 MSI 安装,那么它永远不会提示。然而,对于 setup.exe 安装,它的行为与上述相同。我只有在安装 64 位应用程序时才能成功安装 msi。永远不要使用 32 位应用程序。 有人可以指导我做错了什么吗? 谢谢
VCRedist: This C / C++ runtime (in various versions and flavors) is a pain indeed. I decided to write something up a while back to try to summarize a few things: Wix per user installer to detect the Visual C++ 2015 Redistributable (please skim at least - not great, better than nothing I hope - deals mostly with detecting the presence of the runtime).
合并模块:Installshield Lite是否支持合并模块?如果是这样,您可以使用合并模块而不是 VCRedist_x64.exe
文件来安装 VCRedist。这对于 UWP 应用程序(通用 CRT)来说是不够的,如这些 links:
Do read the links directly above - they are quick reads.
批处理文件:另一种选择是保留 VCRedist_x64.exe
将文件与您的主要设置分开,并将您的 MSI 和 VCRedist_x64.exe
压缩到 ZIP 存档中,然后放入 Install.cmd
那里的批处理文件将首先安装 VCRedist 然后你的 MSI 文件?不太整洁 - 一个人不得不承认。我认为您可以制作一个自动调用它的自解压存档,但我已经很久没有这样做了。
只是来自下面 link 的 模拟批处理文件(未测试):
REM 1. Install VCRuntime
vc_redist.x64.exe /install /quiet /log "%temp%\Install_vc_redist_2017_x64.log"
REM 2. Install MSI
msiexec.exe /i MySetup.msi /L*v C:\MySetup.log /QN
不确定安全修复程序之类的东西。 运行 Windows 之后更新?
安全修复和Link下载:这个运行时有很多安全修复,它是通常安装在大多数机器上,坦率地说,我只是 link 下载最新版本,并让人们自己安装它作为先决条件,而不是在我的设置中捆绑一个过时的版本,但事实并非如此足够了,除非你的包仅供公司使用(在这种情况下,他们更愿意安装自己的运行时并完全控制)。
一些Links(好找):
- Command lines to install and uninstall silently the VC++ 2017 Redistribuables (
installation command lines, untested by me
) - The latest supported Visual C++ downloads(请勾选)
- Microsoft Visual C++ 2017 Resitributable Package (x86)(请务必阅读)
- How to prevent vc_redist.x##.exe (VS2017) from ambiguously failing due to pending reboot?
- Visual Studio 2017 Installer Project - include VC++ 2015 Redistributable
- There is always the WiX toolkit
- Distributable Code for Microsoft Visual Studio 2017 (Includes Utilities, Extensibility, and BuildServer Files)
- Mailbag: How to perform a silent install of the Visual C++ 2010 redistributable packages
感谢您的全面回答。我相信它会帮助很多人。我发现 运行 vc_redist.x86 在安静模式下的命令行确实总是可以正常工作。换句话说,如果没有安装,它将被安装。如果它已经安装或安装了更高版本,它只会 return 没有任何抱怨。使用 InstallShield Lite 2018 不是这种情况(所有以前的版本都一样)。
但是,正如我发现的那样,有一个简单的解决方案可以使其正常工作。需要做的就是在 PRQ 文件的行为部分中包含条目 Hidden="1"。所以现在会有一个看起来像这样的条目:
<behavior Hidden="1" Failure="4" Reboot="2"/>
这解决了问题。它不再与具有自己的 GUI 的 installshield 安装程序分开运行,而是消息现在出现在 installshield 的菜单中,并且它的运行就像您在命令行 运行 它一样。没有更多的错误。