我正在创建一个安装程序,一次安装多个程序和文件包,其中一个是WinZip,我希望WinZip安装程序在后台运行,我使用/s
收集的内容将使它成为可能以静默模式运行,但安装程序仍然无法安装。我相信这是因为在WinZip安装过程中必须做出的选择。所以我的问题是如何设置它以在后台静默安装WinZip?我需要一个答案文件吗?如果是这样,我该如何设置?任何帮助都会很棒!
*我在NSIS文件中的代码片段:
Section
IfFileExists "C:\Program Files\WinZip\WINZIP32.EXE" Dont_Install
SetOutPath $TEMP
File "Installerfiles\WinZip165.exe"
DetailPrint "Starting Winzip installation"
ExecWait "/s WinZip165.exe"
Delete $TEMP\WinZip165.exe
SetOutPath $INSTDIR
Goto done
Dont_Install:
MessageBox MB_OK "You seem to have this program \
(WinZip) already installed"
done:
SectionEnd
*注意我已经看到了有关静默安装的其他问题,这个问题更具有WinZip特性,并且如果需要我将如何建立答案文件。
答案 0 :(得分:2)
ExecWait "/s WinZip165.exe"
显然是错误的,它应该是ExecWait '"$TEMP\WinZip165.exe" /S'
,但我不认为WinZip使用基于NSIS的安装程序......
他们确实提供.MSI,你可能想看一下。他们的知识库包含一些有用的提示,例如this和this。您还可以通过Google搜索来find其他一些提示......
如果您对其静音安装模式有任何其他疑问,请联系WinZip support。
答案 1 :(得分:1)
由于我还没有评论Anders的响应,因为我还没有足够的声誉,这是我个人用来静默安装msi安装程序的命令,直接从我曾经多次使用过的安装程序中复制安装多个程序。
ExecWait '"msiexec" /i "$TEMP\MSI Installer.msi" /qn'
这是假设你接受Anders建议并尝试使用msi版本的WinZip。
此外,Anders还提到了代码中的一个错误,即您没有使用正在尝试运行的安装程序的完整路径。我还想注意,用单引号包装路径总是一个好主意。例如,当你这样做:
Delete $TEMP\WinZip165.exe
像这样添加单引号:
Delete '$TEMP\WinZip165.exe'
当您执行
时,这也适用SetOutPath '$TEMP'
和
SetOutPath '$INSTDIR'
虽然你可以在没有单引号的情况下逃脱大多数情况,但是如果你遇到过包含空格的路径,如果你试图将路径传递给宏或某些东西,它会让你头疼,因为它划分了空格并将字符串分成多个部分。只要你处理可能有或没有空格的Windows路径,这是一个很好的习惯。
BTW不接受这个答案,我打算将其作为安德斯已经说过的后续行动。