我一直在努力尝试使用InstallShield lite安装需要C ++可再发行组件(2017 x86)的软件。 首先,我定义了包含C ++可再发行组件的先决条件。用户尝试安装时,始终会出现用户界面。但是,现在这不是一个真正的问题,如果已经安装了可再发行软件或有较新的版本,则它将失败并显示一条消息,提示已失败,并且它将询问用户是否要继续或中止安装。如果他选择继续,则软件安装正常。这不是非常用户友好。 尽管使用了正确的命令行开关,即/ q / norestart,还是会发生这种情况。如果您在命令提示符下手动执行此操作,它将正常运行。换句话说,它会安装它,否则会因已安装而失败,但不会告诉用户任何内容。这就是它应该起作用的方式。 现在,我尝试在installshield脚本末尾作为自定义操作执行此操作,但是安装似乎在某些计算机上挂起,并在其他错误上挂起。 现在,我能提供的唯一线索是,如果我创建MSI安装,则永远不会提示。但是,使用setup.exe安装时,其作用如上所述。如果我要安装64位应用程序,则只有通过msi安装成功。永远不要使用32位应用程序。 有人可以指导我关于我做错了什么吗? 谢谢
答案 0 :(得分:1)
VCRedist :这种C / C ++运行时(各种版本和口味)确实很痛苦。我决定往前写点东西来尝试总结一些东西: Wix per user installer to detect the Visual C++ 2015 Redistributable (请至少略读一下-不太好,我希望没有总比没有好-主要涉及检测运行时的存在)。
合并模块 : Installshield Lite 是否支持合并模块?如果是这样,您可以使用合并模块而不是 VCRedist_x64.exe
文件来安装 VCRedist 。如以下链接所述,这对于UWP应用程序(通用CRT)是不够的:
请直接阅读上方的链接-它们是快速阅读。
批处理文件 :另一种选择是将 VCRedist_x64.exe
文件与主设置分开,并压缩您的MSI和 VCRedist_x64.exe
放在ZIP存档中,然后在其中放置一个 Install.cmd
批处理文件,该文件将首先安装VCRedist,然后再安装您的MSI文件?不太整洁-必须承认。我认为您可以制作一个可以自动调用它的自解压存档,但是我很久没有这样做了。
仅是下面链接中的样机批处理文件(未经测试):
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 Update?
安全修复程序和下载链接 :此运行时已经有很多安全修复程序,并且通常安装在大多数计算机上,坦率地说,我只是链接下载最新版本,并让人们自己安装它作为先决条件,而不是将旧版本捆绑在我的设置中,但这还远远不够,除非您的软件包仅供企业使用(在这种情况下,他们倾向于在完全控制的情况下安装自己的运行时)。
某些链接 (以方便查找):
installation command lines, untested by me
)答案 1 :(得分:0)
感谢您提供全面的答案。我相信它将帮助很多人。我发现,在安静模式下从命令行运行vc_redist.x86确实可以正常运行。换句话说,如果未安装,它将被安装。如果已安装或已安装更高版本,则它将毫无问题地返回。使用InstallShield Lite 2018并非如此(所有以前的版本相同)。
但是,有一个简单的解决方案可以使它正常工作。所有需要做的就是在PRQ文件的行为部分中包含条目Hidden =“ 1”。因此,现在会有一个看起来像这样的条目:
<behavior Hidden="1" Failure="4" Reboot="2"/>
这解决了问题。它不再与具有自己的GUI的installshield安装程序分开运行,而是消息现在出现在installshield的菜单中,并且其运行方式与在命令行中运行时完全相同。没有更多错误。