Чаще всего следует читать в реестре номер версии
Код:

ReadRegStr $0 HKLM "SOFTWARE\куст_реестра" "имя_параметра"
; в $0 - будет инфо о версии!
Или прочесть из INI файла
Код:

ReadINIStr $0 "$INSTDIR\Файл.ini" "Секция" "Имя"
; в $0 - будет инфо о версии!
Если исполняемый или DLL файл содержит номер версии
Код:

;Ваше определения!
!define VERSION 5.5.5.0 # версия. В скрипте будет выглялеть вот так ${VERSION}
!define APP_NAME "программа" # Имя программы. В скрипте будет выглялеть вот так ${APP_NAME}
;----------------!
GetDllVersion "$INSTDIR\XXX.exe" $R0 $R1
IntOp $R2 $R0 / 0x00010000
IntOp $R3 $R0 & 0x0000FFFF
IntOp $R4 $R1 / 0x00010000
IntOp $R5 $R1 & 0x0000FFFF
StrCpy $R1 "$R2.$R3.$R4.$R5"
; в $R1 - будет инфо о версии!
; дальше можно выполнить код с использованием $R1 , пример ниже
IfFileExists "$INSTDIR\XXX.exe" 0 +3
MessageBox MB_YESNO|MB_ICONEXCLAMATION "У вас уже установлена программа - ${APP_NAME} ${VERSION} \
$\nВы хотите удалить предыдущую версию ${APP_NAME} $R1" IDNO +3
IfFileExists "$INSTDIR\unins000.exe" 0 +3
ExecWait '"$INSTDIR\unins000.exe" /S _?=$INSTDIR' # удаление старой версии для InnoSetup инсталлятора!
GoTo noNext
; Ваш дальнейший код!
noNext:
Если исполняемый или DLL файл не содержит номера версии, поищите где он в файлах указан и прочтите его.
Чтобы убить файл или процесс, следует подходить творчески, прежде всего надо узнать какая сволочь его держит и потом выбрать решение.
Лучше всего узнать класс и придушить его, но для этого нужен отдельный софт
Пример, как по хамски придушить
Код:

ReserveFile "${NSISDIR}\Plugins\KillProcDLL.dll"
;----------------!
KillProcDLL::KillProc "explorer.exe" ; только в крайнем случае!
Убить запущенный процесс
Код:

;Ваше определения!
!define Unclose_1 "XXX.exe" ;- имя запущенного процесса!
;----------------!
ReserveFile "${NSISDIR}\Plugins\KillProc.dll"
;----------------!
return_1:
StrCpy $0 "${Unclose_1}"
KillProc::FindProcesses
StrCmp $1 "-1" wooops_1
StrCmp $0 "0" completed_1
Sleep 1500
MessageBox MB_ICONQUESTION|MB_YESNOCANCEL "У Вас в Трее всё ещё запущен ${Unclose_1} $\nЗавершить этот процесс сейчас?" IDYES +4 IDCANCEL +2
MessageBox MB_ICONINFORMATION|MB_OKCANCEL "Для продолжения деинстоляции следует выбрать 'Да'" IDOK +2
Abort
Goto return_1
StrCpy $0 "${Unclose_1}"
KillProc::KillProcesses
StrCmp $1 "-1" wooops_1
Goto completed_1
wooops_1:
Abort
completed_1: