使用nsis打包检测已安装软件(带强制杀掉进程)

1,350 阅读1分钟
#安装的函数
Var UNINSTALL_PROG
Var OLD_VER
Var OLD_PATH
Function .onInit
	ClearErrors
	ReadRegStr $UNINSTALL_PROG ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "UninstallString"
	IfErrors done
	ReadRegStr $OLD_VER ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} "DisplayVersion"
	MessageBox MB_YESNOCANCEL|MB_ICONQUESTION \
		"检测到本机已经安装了 ${PRODUCT_NAME} $OLD_VER。\
		$\n$\n是否先卸载已安装的版本?" /SD IDYES \
		IDYES uninstall
	Abort

uninstall:
	KillProcDLL::KillProc "${PRODUCT_NAME}.exe"
	StrCpy $OLD_PATH $UNINSTALL_PROG -10
	ExecWait '"$UNINSTALL_PROG" /S _?=$OLD_PATH' $0
	DetailPrint "uninst.exe returned $0"
	Delete "$UNINSTALL_PROG"
	Delete "$DESKTOP\安装包名称.lnk"
    Delete "$SMPROGRAMS\安装包名称\安装包名称.lnk"
	RMDir /r /REBOOTOK $OLD_PATH
	RMDir /r /REBOOTOK "$INSTDIR"
done:
FunctionEnd

#卸载的函数
Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" /SD IDYES \
    IDYES uninstall
  Abort
uninstall:
	KillProcDLL::KillProc "${PRODUCT_NAME}.exe"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\${PRODUCT_NAME}.exe"
  Delete "$DESKTOP\安装包名称.lnk"
  Delete "$SMPROGRAMS\安装包名称\安装包名称.lnk"
  RMDir /r /REBOOTOK "$INSTDIR"
done:
FunctionEnd