Как удалить предыдущую версию установщика, если она уже присутствует с использованием NSIS - PullRequest
0 голосов
/ 18 января 2019

Как удалить предыдущую версию установщика, если она уже существует, используя NSIS с настроенными экранами, похожими на показанные ниже, предоставляя опции Изменить, Восстановить и Удалить:

enter image description here

enter image description here

Я использую приведенный ниже фрагмент кода и использую его, чтобы он высветил окно сообщения и беззвучно удалил его, если присутствует предыдущая версия.

ReadRegStr $R0 HKLM "SOFTWARE\EMR\Medical Record\3.01.00" "InstallPath"
${If} $R0 != ""
MessageBox MB_OKCANCEL "EMR is already installed in $R0 Remove the pervious version?" IDOK uninst
Abort
uninst:
ExecWait '"MsiExec.exe" /X{8ED262EE-FC73-47A9-BB86-D92223246881} /qn'   
${EndIf}

Но как отобразить экран, чтобы дать пользователю опции Изменить, Восстановить и Удалить?

Ниже приведен мой обновленный код, с помощью которого я могу удалить текущую сборку, используя опцию Удалить. Пожалуйста, помогите мне, как это сделать для вариантов изменения и ремонта

Page custom nsDialogsPage nsDialogsPageLeave
  !insertmacro MUI_PAGE_INSTFILES

Function nsDialogsPage
nsDialogs::Create 1044
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
!define MUI_REMOVEPAGE_TITLE_HEIGHT 30
${NSD_CreateLabel} 120u 10u 195u ${MUI_REMOVEPAGE_TITLE_HEIGHT}u "Remove Installation"
    Pop $RemovePageTitle
    CreateFont $RemovePageFont "$(^Font)" "12" "700"
    SendMessage $RemovePageTitle ${WM_SETFONT} $RemovePageFont 0 

${NSD_CreateButton} 12% 20% 25% 10% "Change"
        Pop $buttonRepair

        ${NSD_CreateLabel} 18% 35% 100% 12u "Change independently selectable features"
    Pop $Label

        ${NSD_CreateButton} 12% 50% 25% 10% "Repair"
        Pop $buttonRepair
         ${NSD_CreateButton} 12% 80% 25% 10% "Remove"
        Pop $buttonUninstall
        EnableWindow $button 1 # start out disabled
        EnableWindow $button2 1
        ${NSD_OnClick} $buttonRepair ManageRepair
        ${NSD_OnClick} $buttonUninstall ManageUninstall
    nsDialogs::Show

FunctionEnd

Function ManageRepair
    MessageBox MB_OK "Repair"
FunctionEnd

Function ManageUninstall
    MessageBox MB_OK "Uninstallation"
    ExecWait "$INSTDIR\uninstall.exe"
FunctionEnd

Function nsDialogsPageLeave

    ${NSD_GetText} $Text $0
    MessageBox MB_OK "You typed:$\n$\n$0"

FunctionEnd

1 Ответ

0 голосов
/ 22 января 2019

Я не очень понимаю, почему вы пытаетесь повторить это в NSIS, просто выполняя (ExecShell) .MSI должен дать вам аналогичное диалоговое окно, если продукт уже установлен.

Глядя на документацию msiexec , мы находим:

  • /x для удаления.
  • /f к ремонту.
  • /i «Установка или настройка продукта».

Установщики, основанные на NSIS, с другой стороны, не поддерживают эти операции, но ремонт обычно можно выполнить, просто переустановив поверх существующей установки.

...