如果使用具有自定义屏幕的NSIS(如下面所示)通过提供“更改”,“修复”和“删除”选项,则如何删除以前版本的安装程序:
我正在使用以下代码段,并使用该代码段弹出一个消息框,并在存在以前版本的情况下静默卸载。
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
答案 0 :(得分:0)
我真的不明白为什么您只是在执行(ExecShell
时试图在NSIS中复制它。如果已经安装了产品,.MSI应该会给您一个类似的对话框。
看看msiexec documentation,我们发现:
/x
进行卸载。/f
进行修复。/i
“安装或配置产品”。基于NSIS的安装程序不支持这些操作,但是通常只需在现有安装的顶部重新安装即可进行修复。