Installation 检查返回代码(或其他内容)以确保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用户,

我正在使用NSIS安装一些MSI。我使用的是
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