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

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

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


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

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


Я тоже редко что-то новое (для себя) делаю в NSIS. Немного изменил числовые параметры вашего примера. Меня все устраивает и ждать ничего не нужно. В итоге я имею отслеживание запущенного процесса во время отсчета таймера и отображение обратного отсчета таймера над прогресбаром.

Скриншот и сценарий




Код: Выделить весь код
Unicode true
!include "MUI2.nsh"
!include "Logiclib.nsh"
!include "ProcessFunc.nsh"
!include "FileFunc.nsh"

Var datetime
Var BackupDir
Var SourseDir

Name "SomeAPP Saver"
OutFile "SomeAPP.Saver.exe"
InstallDir "D:\SomeAPP\"
ShowInstDetails show

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

RequestExecutionLevel admin

!macro backupLoop
  Loop:
${If} ${ProcessExists} "SomeAPP.exe"
; дата и текущее значение времени в формате ГГГГ ММ ДД ДН ЧЧ ММ СС
    ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
;      MessageBox MB_OK|MB_ICONEXCLAMATION "$0 $1 $2 $3 $4 $5 $6"
; дата в формате YYYY-MM-DD_HH-MM для имени папки
    StrCpy $datetime "$2-$1-$0_$4-$5"
; Создание папки с меткой даты текущего времени
    StrCpy $BackupDir "$LOCALAPPDATA\SomeAPP\Saved\$datetime_SomeAPPSaved"
    CreateDirectory $BackupDir
; Создание резервной копии папки 'SomeAPPSaved' в родительской папке
    StrCpy $SourseDir "$LOCALAPPDATA\SomeAPP\Saved\SomeAPPSaved\*"
    CopyFiles /SILENT "$SourseDir" "$BackupDir"

; Код Salmo вместо Sleep 600000 - 10 минут интервал повтора резервирования
    StrCpy $7 600 ; количество отсчетов Sleep
       next:
         Sleep 1000  ; интервал отсчета 1 сек.
    ${FindProcessName} "SomeAPP.exe" $8
         StrCmp $8 "1" 0 skip
         IntOp $7 $7 - 1
		 
; Обратный отсчет таймера над прогресбаром
    SetDetailsPrint textonly
         DetailPrint "До создания следующей резервной копии осталось $7 сек..."
               SetDetailsPrint listonly
    StrCmp $7 0 0 next
    skip:
${Else}
    Goto done
${EndIf}
    Goto Loop
  done:
!macroend

Section
Exec "$INSTDIR\SomeAPP.exe"
${If} ${ProcessExists} "SomeAPP.exe"
    !insertmacro backupLoop
Goto done1
${Else}
     done1:
ExecShell "open" "$LOCALAPPDATA\SomeAPP\Saved"
${EndIf}
     Quit
SectionEnd

Function .onVerifyInstDir
    IfFileExists "$INSTDIR\SomeAPP.exe" PathGood
    Abort
PathGood:
FunctionEnd

Отправлено: 11:12, 06-04-2025 | #2895