; Current Usage:
;
;  Push "$SYSDIR\atl.dll"
;  !insertmacro UpgradeDLL "atl.dll"
;
; How about changing it to:
; !insertmacro UpgradeDLL "D:\DEV\Poject1\" "atl.dll" "$SYSDIR\atl.dll" "PARANOID" ;prompt for overwrite/replace existing
; !insertmacro UpgradeDLL "D:\DEV\Poject1\" "atl.dll" "$SYSDIR\atl.dll" "EASYGOING" ;just do it

!macro UpgradeDLL DLL_FILE_PATH DLL_NAME DLL_LOCATION PROMPT
	Exch $0
	Push $1
	Push $2
	Push $3
	Push $4
	Push $5
	ClearErrors
	GetDLLVersionLocal ${DLL_NAME} $1 $2
	GetDLLVersion ${DLL_LOCATION} $3 $4
	IfErrors upgrade_${DLL_NAME}
	IntCmpU $1 $3 0 noupgrade_${DLL_NAME} upgrade_${DLL_NAME}
	IntCmpU $2 $4 noupgrade_${DLL_NAME} noupgrade_${DLL_NAME} upgrade_${DLL_NAME}
	upgrade_${DLL_NAME}:
		IfFileExists ${DLL_LOCATION} check_prompt_${DLL_NAME} dont_unreg_${DLL_NAME}
	check_prompt_${DLL_NAME}:
		StrCmp ${PROMPT} "PARANOID" show_prompt_${DLL_NAME}
		StrCmp ${PROMPT} "EASYGOING" do_unreg_${DLL_NAME}
	show_prompt_${DLL_NAME}:
		MessageBox MB_MB_YESNO|MB_ICONEXCLAMATION "The file: ${DLL_LOCATION} \
			is older than the version needed for this application.  Would you \
			like to update your version of ${DLL_NAME}?  If you choose NO the \
			application may not run properly" \
			IDYES do_unreg_${DLL_NAME} IDNO noupgrade_${DLL_NAME}
	do_unreg_${DLL_NAME}:
		UnRegDLL ${DLL_LOCATION}
		GetTempFileName $5
		File /oname=$5 "${DLL_FILE_PATH}${DLL_NAME}"
		rename /REBOOTOK $5 ${DLL_LOCATION}
		DetailPrint "Installed ${DLL_LOCATION}"
		IfRebootFlag regreboot_${DLL_NAME} regnoreboot_${DLL_NAME}
	dont_unreg_${DLL_NAME}:
		File /oname=${DLL_LOCATION} "${DLL_FILE_PATH}${DLL_NAME}"
		DetailPrint "Installed ${DLL_LOCATION}"
		goto regnoreboot_${DLL_NAME}
	regreboot_${DLL_NAME}:
		WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\RunOnce ${DLL_LOCATION} "$SYSDIR\regsvr32 /s ${DLL_LOCATION}"
		goto done_${DLL_NAME}
	regnoreboot_${DLL_NAME}: 
		RegDLL ${DLL_LOCATION}
		goto done_${DLL_NAME}
	noupgrade_${DLL_NAME}:
		IntFmt $R3 "%X" $3
		IntFmt $R4 "%X" $4
		DetailPrint "*** Already installed ${DLL_LOCATION} $R3 $R4"
	done_${DLL_NAME}:
		Pop $5
		Pop $4
		Pop $3
		Pop $2
		Pop $1
		Pop $0
	!undef DLL_NAME
	!undef DLL_LOCATION
	!undef PROMPT
!macroend