Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для sawe

Пользователь


Сообщения: 89
Благодарности: 20

Профиль | Отправить PM | Цитировать


Чаще всего следует читать в реестре номер версии
Код: Выделить весь код
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:
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:13, 20-05-2011 | #1192