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\u FULLNAME}的名称已经有了不同的版本号。
请告诉我如何使注册表中的条目只查找程序名“My program”,而不考虑版本号?
重要的补充!