Проверьте код возврата (или что-то еще), чтобы убедиться, что MSI установлен правильно - PullRequest
2 голосов
/ 09 ноября 2010

Я использую NSIS для установки некоторых MSI. Я использую ExecWait "msiexec /passive /liare+ ${SETUP_LOG_FILE} -i $TEMP\MyMsi.msi". Когда MSI имеет ту же версию, что и установленное приложение, он не проходит установку («Другая версия этого продукта уже установлена»), но NSIS продолжает работу, как будто ничего не происходит. (Но файл журнала выявляет проблему.)

Как проверить, не прошла ли установка MSI? Если это не помогло, как правильно остановить установку NSIS?

Ответы [ 3 ]

3 голосов
/ 09 ноября 2010

Вы можете проверить код ошибки , возвращаемый msiexec . Например, «Другая версия этого продукта уже установлена» возвращает 1638.

Я не пользователь NSIS, но из того, что я могу сказать из документации NSIS, я думаю, что вы можете захватить код выхода из msiexec в $0, как это:

ExecWait "msiexec -i $TEMP\MyMsi.msi" $0
2 голосов
/ 10 ноября 2010

Исходя из ответа @ Wim, вот мое решение.(Название приложения, которое мне нужно установить, - «Evergreen Programmer», и есть также код, чтобы проверить, является ли процессор 32- или 64-разрядным.) Мне не нравится, как Abort заставляет GUI выглядеть,хотя (пользователь должен нажать Отмена):

screenshot showing the result of using Abort

!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
1 голос
/ 09 ноября 2010

Оформить заказ Список кодов ошибок и сообщений об ошибках для процессов установщика Windows

msiexec должен был вернуть код 1638 в этой ситуации.

...