В имени моей программы, которое записывается в реестр, есть номер версии (например, это выглядит так: «Моя программа 3.1»). Мне нужно удалить старую установку при установке новых версий 3.2 или 3.3 (и т. Д.), Но я не знаю, как заставить программу установки найти предыдущую установку в реестре по номеру версии. Да, я узнал образец этой ссылки: http://nsis.sourceforge.net/Auto-uninstall_old_before_installing_new Но в этом примере поиск в реестре выполняется по имени программы. В моем случае название программы меняется, потому что номер версии изменился, и установщик больше не может найти эту запись в реестре, чтобы удалить старую версию перед установкой новой версии. Подскажите, пожалуйста, как мне это сделать.
Вот мой пример кода:
;Define main variables:
!define PRODUCT_NAME "My programm"
!define PRODUCT_VERSION "3.9"
!define PRODUCT_FULLNAME "${PRODUCT_NAME} ${PRODUCT_VERSION}"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_FULLNAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_UNINSTALL_EXE "uninstall.exe"
;Registry is added by this:
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" '"$INSTDIR\${PRODUCT_UNINSTALL_EXE}" _?=$INSTDIR'
;Read the registry key value for uninstall previous installation:
ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
StrCmp $R0 "" done
Но эта команда не может найти запись в реестре, поскольку имя программы $ {PRODUCT_FULLNAME} уже имеет другой номер версии.
Подскажите пожалуйста, как сделать так, чтобы запись в реестре искала только название программы "Моя программа" и не учитывала номер версии?
Важное дополнение!
В сообщении выше я забыл уточнить одну вещь: мой установщик сделан для плагина, который устанавливается в нескольких версиях 3ds Max. В результате запись в реестре выглядит так: для одной версии «Моя программа 3.1 для 3dsMax 2014» и для другой версии «Моя программа 3.1 для 3dsMax 2018». И после установки новой версии моей программы записи должны выглядеть так: «Моя программа 3.2 для 3dsMax 2014» и «Моя программа 3.2 для 3dsMax 2018». То есть должен изменяться только номер версии моей программы, а все остальное («Моя программа ...» и «... для 3dsMax (версия 3ds Max)» должны оставаться неизменными.
Спасибо за понимание и заранее благодарим за помощь!