Как перейти от установщика .msi к электронному сборщику (nsis)

В настоящее время у меня есть приложение, которое распространялось как установщик .msi (созданное с помощью Wix). Я только что закончил перенос этого приложения на Electron, чтобы воспользоваться всеми последними и лучшими функциями, включая использование Electron Builder и автоматических обновлений.

Кто-нибудь из гуру wix / msi знает, как лучше всего удалить старый msi и запустить новый установщик? Найденные мной решения включают поиск в реестре Windows UUID msi с последующим использованием msiexec.

Можно ли просто создать новую версию .msi, которая все очищает?


person EL45    schedule 04.03.2019    source источник


Ответы (1)


Если я правильно понял, вы хотите перейти с формата MSI на формат NSIS? Здесь есть статья об этом: https://nsis.sourceforge.io/Uninstalling_a_previous_MSI.


Однако я бы посоветовал вам найти код продукта для MSI и вызвать msiexec.exe с кодом продукта и вашей собственной строкой удаления (не той, что получена из реестра как показано в приведенной выше документации). Таким образом, вы можете добавить несколько конструкций для предотвращения самопроизвольной перезагрузки и для обеспечения правильной работы без звука. Этот подход описан ниже.


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

Найти код продукта: GUID продукта MSI можно найти следующим образом: Как найти GUID продукта для установленной установки MSI?

Командная строка: комбинируя подход 3.5 из первой ссылки выше и код продукта, найденный с использованием информации во второй ссылке, вы можете использовать такую ​​командную строку для вызова из вашего NSIS. установщик:

msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=ReallySuppress

Краткое объяснение параметров:

/X = run uninstall sequence
{11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
/QN = run completely silently
/L*V "C:\msilog.log"= verbose logging at path specified
REBOOT=ReallySuppress = prevent unexpected reboot of computer

ExecWait: для NSIS требуется свой особый формат команды: Запуск MSIEXEC в сценарии NSIS с переключателями установщика. Еще не тестировал, но предложение:

StrCpy $R0 "{11111111-1111-1111-1111-11111111111X}";  the MSI's ProductID of my package
ExecWait '"msiexec.exe" /x $R0 /QN REBOOT=ReallySuppress'

Здесь можно найти точную настройку командной строки: https://nsis.sourceforge.io/Uninstalling_a_previous_MSI.


Ссылки:

person Stein Åsmul    schedule 05.03.2019
comment
Потрясающий. Спасибо. Вы нашли гораздо больше информации, чем я. - person EL45; 05.03.2019
comment
Замечательно, что это сработало, приходилось ли вам вносить какие-либо изменения в ExecWait? Я обновлю ответ в строке, если это так. Приносим извинения за информационную перегрузку - это всегда происходит при попытке сделать ответ повторно используемым. - person Stein Åsmul; 05.03.2019
comment
Команда ExecWait работала отлично. В итоге я использовал Exec, чтобы завершить установку, не дожидаясь удаления старого приложения. Еще раз спасибо, это был прекрасный ответ. - person EL45; 06.03.2019