Installation 检查返回代码(或其他内容)以确保MSI已正确安装
我正在使用NSIS安装一些MSI。我使用的是Installation 检查返回代码(或其他内容)以确保MSI已正确安装,installation,windows-installer,nsis,Installation,Windows Installer,Nsis,我正在使用NSIS安装一些MSI。我使用的是ExecWait“msiexec/passive/liare+${SETUP\u LOG\u FILE}-I$TEMP\MyMsi.msi”。当MSI与已安装的应用程序版本相同时,安装失败(“已安装本产品的另一个版本”),但NSI继续运行,就好像没有任何问题一样。(但日志文件揭示了问题。) 如何检查MSI安装是否失败?如果它确实失败了,那么停止NSIS安装的正确方法是什么?您可以检查。例如,“已安装此产品的另一个版本”返回1638 我不是NSIS用户,
ExecWait“msiexec/passive/liare+${SETUP\u LOG\u FILE}-I$TEMP\MyMsi.msi”
。当MSI与已安装的应用程序版本相同时,安装失败(“已安装本产品的另一个版本”),但NSI继续运行,就好像没有任何问题一样。(但日志文件揭示了问题。)
如何检查MSI安装是否失败?如果它确实失败了,那么停止NSIS安装的正确方法是什么?您可以检查。例如,“已安装此产品的另一个版本”返回1638
我不是NSIS用户,但从NSIS文档中可以看出,我认为您可以从msiexec中选择$0
如下:
ExecWait "msiexec -i $TEMP\MyMsi.msi" $0
结帐
在这种情况下,msiexec应该返回1638代码。关于@Wim的答案,下面是我的解决方案。(我需要安装的应用程序的名称是“Evergreen Programmer”,还有代码可以检查CPU是32位还是64位。)我不喜欢
Abort
让GUI看起来像这样(用户必须单击取消):
!include "x64.nsh"
Function CheckReturnCode
DetailPrint "MSI return code was $0"
${If} $0 != 0
Abort "There was a problem installing the application."
${EndIf}
FunctionEnd
Section "FrameworkAndApp" SecFrameworkApp
SetOutPath "$TEMP"
File /oname=EvergreenProgrammerSetup.msi "${SETUP_FILE}"
File /oname=EvergreenProgrammerSetup64.msi "${SETUP_FILE_64}"
InstallEvergreenProgrammer:
Push "Starting Evergreen Programmer Install Version ${MAJOR_VERSION}.${MINOR_VERSION}.${REVISION}"
Call DebugLog
DetailPrint "Starting Evergreen Programmer Install Version ${MAJOR_VERSION}.${MINOR_VERSION}.${REVISION}"
IfSilent InstallAppWithNoProgressBar
${If} ${RunningX64}
DetailPrint "64-bit detected"
ExecWait "msiexec /passive /liare+ ${SETUP_LOG_FILE} -i $TEMP\EvergreenProgrammerSetup64.msi" $0
${Else}
ExecWait "msiexec /passive /liare+ ${SETUP_LOG_FILE} -i $TEMP\EvergreenProgrammerSetup.msi" $0
${EndIf}
Call CheckReturnCode
SetRebootFlag true
Goto EndInstall
InstallAppWithNoProgressBar:
${If} ${RunningX64}
DetailPrint "64-bit detected"
ExecWait "msiexec /quiet /liare+ ${SETUP_LOG_FILE} -i $TEMP\EvergreenProgrammerSetup64.msi" $0
${Else}
ExecWait "msiexec /quiet /liare+ ${SETUP_LOG_FILE} -i $TEMP\EvergreenProgrammerSetup.msi" $0
${EndIf}
Call CheckReturnCode
SetRebootFlag true
Goto EndInstall
EndInstall:
IfRebootFlag PromptForReboot
Return
PromptForReboot:
IfSilent SkipReboot
MessageBox MB_OK "The application will not function correctly without a reboot or log off."
SkipReboot:
SectionEnd