Я создаю новый установщик программного обеспечения, используя NSIS. Перед использованием NSIS мы использовали установщик WIX для создания того же пакета установщика.
Мое требование: когда мы устанавливаем более новую версию Установщика (например, EMR 4.0) с использованием NSIS, если есть какая-либо более старая версия установщика (например, EMR 3.0), которая была создана с помощью установщика WIX и присутствует, тогда мы должны удалите старую программу установки перед установкой новой версии программы установки.
Для этого я написал приведенный ниже фрагмент кода в .Oninit, но он не работает
ReadRegStr $R0 HKLM "SOFTWARE\CPS\PowerChute Personal Edition\3.01.00" "InstallPath"
В приведенной выше строке первый параметр, который я передал, взят из реестра Windows.
Второй параметр «InstallPath» - это местоположение каталога
InstallPath:
C: \ Program Files \ CPS \ PowerChute Personal Edition \
Pop $0;
${If} $0 <> 0
MessageBox MB_ICONSTOP "Reading Registry Failed, error $0"
${Else}
MessageBox MB_OKCANCEL "Reading the Registry $R0"
Здесь происходит переход к другой части и вывод сообщения:
«Чтение реестра C: \ Program Files \ CPS \ PowerChute Personal Edition \»
Затем я добавил приведенный ниже код, но он показывает ошибку в IDOK: «Недопустимая команда:« IDOK »
IDOK uninst
Abort
${EndIf}
uninst:
Exec $R0\uninst.exe
done:
Я хотел знать, это правильный способ удаления? строка "Exec $ R0 \ uninst.exe" действительно работает?
А также можем ли мы использовать $ {If} $ R0 <> "", чтобы проверить, что путь не пустой?
Пожалуйста, помогите мне продолжить, высказав свои мысли.
Ниже приведен обновленный код:
ReadRegStr $R0 HKLM "SOFTWARE\CPS\PowerChute Personal Edition\3.01.00" "InstallPath"
${If} $R0 != ""
MessageBox MB_OKCANCEL "Powerchute is already installed. Remove the pervious version"
ExecWait '"$R0\uninst.exe"'
${Else}
MessageBox MB_OKCANCEL "Powerchute is not installed"
${EndIf}
Могу ли я использовать ExecWait «$ R0 \ uninst.exe» непосредственно под блоком сообщений в условии If.
Обновлен код для нового требования:
Мое новое требование в приведенной ниже функции .onInit, если условие IF выполнено, а не показывает MessageBox. Мне нужно показать диалоговое окно, в котором у меня есть заголовок, такой как «Изменить, восстановить или удалить установку», кнопку «Удалить» и некоторый текст. И когда я нажимаю на кнопку «Удалить», он должен удалить. Я написал некоторый код, но, пожалуйста, помогите мне закончить его.
Page custom MyPageCreate
Function .onInit
ReadRegStr $R0 HKLM "SOFTWARE\APC\PowerChute Personal Edition\3.01.00" "InstallPath"
${If} $R0 != ""
;MessageBox MB_OKCANCEL "Powerchute is already installed in $R0 Remove the ;pervious version?" IDOK uninst
; HERE I SHOULD CALL THE FUNCTION
MyPageCreate
Abort
uninst:
ExecWait '"MsiExec.exe" /X{8ED262EE-FC73-47A9-BB86-D92223246881}'
${Else}
MessageBox MB_OKCANCEL "Not intalled"
${EndIf}
FunctionEnd
Var Text
Below is the function:
Function MyPageCreate
nsDialogs::Create 1018
Pop $0
${NSD_CreateLabel} 0 0 100% 12u "Change, repair, or remove installation"
Pop $0
${NSD_CreateText} 0 13u 100% -13u "Type something here..."
Pop $Text
**** Here I need to give the remove button **********
nsDialogs::Show
FunctionEnd