Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Ответить
Настройки темы
.: NSIS - все вопросы :. часть 2.

Аватара для kotkovets

Ветеран


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


Конфигурация

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


Изменения
Автор: kotkovets
Дата: 07-06-2020
Описание: NSIS 3.05


Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.


Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: NSIS 3.05 от 15 декабря 2019 года
Скачать | Архив сборок версии

Первая часть этой темы
Скачать первую часть этой темы одним архивом

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов


Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

С пакетом NSIS поставляются несколько плагинов, позволяющих добавлять новые страницы, заменять фоновые изображения, скачивать файлы из Интернета, выполнять математические вычисления, обновлять файлы и многое другое.

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

▫ Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:02, 09-12-2012

 

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


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

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


Сделал простенький сценарий для резервного копирования папки сохранений программы.
Программа создает сохранения на протяжении всего времени своей работы.
Все хорошо работает, но есть один досадный нюанс.
Предусмотрено, если выйти из программы, создание резервных копий прекращается и открывается папка сохранений.
Но! Если интервал создания резервных копий сделать достаточно большим (мне нужно 10 минут), после выхода из программы приходится ждать завершения этого временнОго периода, что очень не удобно.
Как сделать, чтобы выход из программы прерывал таймер отсчета времени? Не могу сообразить, что нужно сделать.

Сценарий

Код: Выделить весь код
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"
    ; дата в формате YYYY-MM-DD_HH-MM
    ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6
    StrCpy $datetime "$0-$1-$2_$4-$5"
    ; Создание папки с меткой даты
    StrCpy $BackupDir "$LOCALAPPDATA\SomeAPP\Saved\$datetime_SomeAPPSaved"
    CreateDirectory $BackupDir
    ; Создание резервной копии папки 'SomeAPPSaved' в родительской папке
    StrCpy $SourseDir "$LOCALAPPDATA\SomeAPP\Saved\SomeAPPSaved"
    CopyFiles /SILENT "$SourseDir" "$BackupDir"
    Sleep 60000 ; 1 минута интервал повтора резервирования
${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

Последний раз редактировалось Kopejkin, 05-04-2025 в 19:29.


Отправлено: 13:06, 31-03-2025 | #2891



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


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


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

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


Цитата Kopejkin:
Как сделать, чтобы выход из программы прерывал таймер отсчета времени? »
Ну на команде Sleep 10мин код просто в паузе, динамики нет. Самое простое введите циклическую проверку наличия процесса вашей программы во время паузы (динамической) 10 мин. При отсутствии процесса отсчет времени прекратится и код отработает дальше. В этом случае возможна незначительная утечка памяти, не знаю, не проверял. Код вместо Sleep 10мин:
Код: Выделить весь код
StrCpy $0 10
next:
Sleep 60000  ; 1 мин
${FindProcessName} "Моя Программа" $1
StrCmp $1 "1" 0 +3
IntOp $0 $0 - 1
StrCmp $0 0 0 next

Последний раз редактировалось Salmo, 04-04-2025 в 19:55.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:48, 04-04-2025 | #2892


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


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

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


Спасибо, Salmo. Не сразу сообразил, как это работает. Буду играться интервалами и отсчетами.

Отправлено: 20:39, 05-04-2025 | #2893


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


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

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


Kopejkin, Код простой, но есть недостаток. Если завершение программы произойдет в момент минутной паузы, то пока она длится, код дальше отрабатывать не будет. Есть решение с применением библиотеки ProcessFunc.nsh, написанной маэстро kotkovets Смотрите в справочнике по NSIS в шапке темы. В разделе "Работа с процессами" в подпункте "Ожидание завершения запущенного процесса заданное время" - ${ProcessWait} "process.exe" "time" $var. В "time" впишите свои 10 минут и макрос будет мгновенно отлавливать завершение процесса вашей программы и в отработке кода никаких пауз не будет. Библиотека написана давно и я не знаю, совместима ли она с вашей версией компилятора. Я 6 лет не был на форуме и стал"дремуч" в этой теме

Отправлено: 23:16, 05-04-2025 | #2894


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


Сообщения: 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


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


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

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


Цитата Kopejkin:
Меня все устраивает »
Если устраивает, ну и хорошо. Успехов в творчестве!

Отправлено: 15:14, 06-04-2025 | #2896


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


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

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


Когда-то MKN публиковал код, который позволял использовать BMP-картинку на стандартных страничках установщика.
Также было указано, что странички можно использовать по выбору.
У меня не получается использовать только две странички: PAGE_DIRECTORY и PAGE_INSTFILES. Код работает только если дополнительно есть страничка PAGE_FINISH. Без нее не хочет компилироваться:
Function: "DirectoryPageShow"
Синтаксис: FindWindow $(user_var: handle output) WindowClass [WindowTitle] [Window_Parent] [Child_After]
Ошибка в сценарии "D:\INSTALL_TEST\State Of Decay 2\bgbitmap-mkn2.nsi", строка 124 -- сборка прервана

Может знает кто, как победить?

Открыть код

Код: Выделить весь код
!include MUI.nsh
!include WinMessages.nsh
 
 ;size 497x314
!define BITMAP_FILE bg.bmp
 
Name "Background Bitmap"
OutFile "bgbitmap.exe"
InstallDir "$TEMP"
ShowInstDetails show
 
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit
 
!define LR_LOADFROMFILE     0x0010
!define LR_CREATEDIBSECTION 0x2000
!define IMAGE_BITMAP        0
!define SS_BITMAP           0x0000000E
!define WS_CHILD            0x40000000
!define WS_VISIBLE          0x10000000
!define HWND_TOP            0
!define SWP_NOSIZE          0x0001
!define SWP_NOMOVE          0x0002
!define IDC_BITMAP          1500
!define stRECT "(i, i, i, i) i"
 
Var hBitmap
 
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageShow
!insertmacro MUI_PAGE_WELCOME
;!define MUI_PAGE_CUSTOMFUNCTION_SHOW LicensePageShow
;!insertmacro MUI_PAGE_LICENSE bgbitmap.nsi
!define MUI_PAGE_CUSTOMFUNCTION_SHOW DirectoryPageShow
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW ComponentsPageShow
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_SHOW InstFilesPageShow
!insertmacro MUI_PAGE_INSTFILES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishPageShow
!insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE English
 
; Destroy a window.
!macro DestroyWindow HWND IDC
  GetDlgItem $R0 ${HWND} ${IDC}
  System::Call `user32::DestroyWindow(i R0)`
!macroend
 
; Give window transparent background.
!macro SetTransparent HWND IDC
  GetDlgItem $R0 ${HWND} ${IDC}
  SetCtlColors $R0 0xFFFFFF transparent
!macroend
 
; Refresh window.
!macro RefreshWindow HWND IDC
  GetDlgItem $R0 ${HWND} ${IDC}
  ShowWindow $R0 ${SW_HIDE}
  ShowWindow $R0 ${SW_SHOW}
!macroend
 
Function MyGUIInit
  InitPluginsDir
  ReserveFile `${BITMAP_FILE}`
  File `/ONAME=$PLUGINSDIR\bg.bmp` `${BITMAP_FILE}`
 
  ; Получение параметров родительского окна
  System::Call `*${stRECT} .R0`
  System::Call `user32::GetClientRect(i $HWNDPARENT, i R0)`
  System::Call `*$R0${stRECT} (, , .R1, .R2)`
  System::Free $R0
 
  ; Создание нового окна и помещение в него изображения
  System::Call `kernel32::GetModuleHandle(i 0) i.R3`
  System::Call `user32::CreateWindowEx(i 0, t "STATIC", t "", i ${SS_BITMAP}|${WS_CHILD}|${WS_VISIBLE}, i 0, i 0, i R1, i R2, i $HWNDPARENT, i ${IDC_BITMAP}, i R3, i 0) i.R1`
  System::Call `user32::SetWindowPos(i R1, i ${HWND_TOP}, i 0, i 0, i 0, i 0, i ${SWP_NOSIZE}|${SWP_NOMOVE})`
  System::Call `user32::LoadImage(i 0, t "$PLUGINSDIR\bg.bmp", i ${IMAGE_BITMAP}, i 0, i 0, i ${LR_CREATEDIBSECTION}|${LR_LOADFROMFILE}) i.s`
  Pop $hBitmap
  SendMessage $R1 ${STM_SETIMAGE} ${IMAGE_BITMAP} $hBitmap
 
  ; Установка прозрачности фона
  !insertmacro SetTransparent $HWNDPARENT 3
  !insertmacro SetTransparent $HWNDPARENT 1
  !insertmacro SetTransparent $HWNDPARENT 2
  !insertmacro SetTransparent $HWNDPARENT 1034
  !insertmacro SetTransparent $HWNDPARENT 1037
  !insertmacro SetTransparent $HWNDPARENT 1038
 
;Удаление не нужных контролов (элементов управления)
  !insertmacro DestroyWindow  $HWNDPARENT 1256
  !insertmacro DestroyWindow  $HWNDPARENT 1028
  !insertmacro DestroyWindow  $HWNDPARENT 1039
FunctionEnd
 
;Обновление контролов родительского окна. Необходимо для некоторых элементов управления, 
;если они имеют прозрачный фон.
Function RefreshParentControls
   !insertmacro RefreshWindow  $HWNDPARENT 1037
  !insertmacro RefreshWindow  $HWNDPARENT 1038
FunctionEnd
 
Function WelcomePageShow
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1200
  !insertmacro SetTransparent $MUI_HWND 1201
  !insertmacro SetTransparent $MUI_HWND 1202
 FunctionEnd
 
/*; For license page.
Function LicensePageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1040
  !insertmacro SetTransparent $MUI_HWND 1000
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1034
  !insertmacro SetTransparent $MUI_HWND 1035
  Call RefreshParentControls
 FunctionEnd*/
 
Function DirectoryPageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1019
  !insertmacro SetTransparent $MUI_HWND 1001
  !insertmacro SetTransparent $MUI_HWND 1024
  !insertmacro SetTransparent $MUI_HWND 1008
  !insertmacro SetTransparent $MUI_HWND 1023
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1020
  ; Remove group box text. $R0 still contains HWND of 1020 
  SendMessage $R0 ${WM_SETTEXT} 0 STR:
  ; Refresh controls.
  Call RefreshParentControls
 FunctionEnd
 
Function ComponentsPageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1017
  !insertmacro SetTransparent $MUI_HWND 1022
  !insertmacro SetTransparent $MUI_HWND 1021
  !insertmacro SetTransparent $MUI_HWND 1023
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1032
  Call RefreshParentControls
 FunctionEnd
 
Function InstFilesPageShow
  FindWindow $MUI_HWND "#32770" "" $HWNDPARENT
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1027
  !insertmacro SetTransparent $MUI_HWND 1004
  !insertmacro SetTransparent $MUI_HWND 1006
  !insertmacro SetTransparent $MUI_HWND 1016
  Call RefreshParentControls
 FunctionEnd
 
Function FinishPageShow
  SetCtlColors $MUI_HWND 0xFFFFFF transparent
  !insertmacro SetTransparent $MUI_HWND 1200
  !insertmacro SetTransparent $MUI_HWND 1201
  !insertmacro SetTransparent $MUI_HWND 1202
  !insertmacro SetTransparent $MUI_HWND 1203
  !insertmacro SetTransparent $MUI_HWND 1204
  !insertmacro SetTransparent $MUI_HWND 1205
  !insertmacro SetTransparent $MUI_HWND 1206
 FunctionEnd
 
; Free loaded resources. Destroy the bitmap.
Function .onGUIEnd
  System::Call `gdi32::DeleteObject(i s)` $hBitmap
 FunctionEnd
 
Section "Section1"
SectionEnd

Отправлено: 20:37, 06-04-2025 | #2897

MKN MKN вне форума

Ветеран


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

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


Kopejkin,
Удали-закомментируй :
;!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishPageShow
;!insertmacro MUI_PAGE_FINISH

;Function FinishPageShow
;SetCtlColors $MUI_HWND 0xFFFFFF transparent
;!insertmacro SetTransparent $MUI_HWND 1200
;!insertmacro SetTransparent $MUI_HWND 1201
;!insertmacro SetTransparent $MUI_HWND 1202
;!insertmacro SetTransparent $MUI_HWND 1203
;!insertmacro SetTransparent $MUI_HWND 1204
;!insertmacro SetTransparent $MUI_HWND 1205
;!insertmacro SetTransparent $MUI_HWND 1206
;FunctionEnd

В остальном код рабочий, без ошибок (Проверил на W7 NSIS 3.9.0)

Отправлено: 11:42, 07-04-2025 | #2898


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


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

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


Цитата MKN:
Удали-закомментируй : »
Не-а... Что-то с моими лыжами. Ошибка та же - не компилируется.

Проверял, какие комбинации работают в вашем сценарии (с комментированием соответствующих частей сценария)
Работает комбинация страниц PAGE_WELCOME и PAGE_FINISH.
Работает любая комбинация страницы PAGE_WELCOME и "внутренних" страниц отдельно, вместе и выборочно.
Работает любая комбинация страницы PAGE_FINISH и "внутренних" страниц отдельно, вместе и выборочно.

Любая комбинация "внутренних" четырех страниц НЕ РАБОТАЕТ.
Хотя в стандартном сценарии любые комбинации страничек компилируются.

Вопрос остается: как сделать, чтобы в сценарии MKN работала комбинация страниц PAGE_DIRECTORY и PAGE_INSTFILES?

Последний раз редактировалось Kopejkin, 07-04-2025 в 17:14.


Отправлено: 16:55, 07-04-2025 | #2899



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 dimadr Наборы обновлений для Windows XP/2003/Windows 7 267 14-02-2020 08:25
[архив].: NSIS - все вопросы :. kotkovets Автоматическая установка приложений 3387 09-12-2012 11:56
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 jameszero Наборы обновлений для Windows XP/2003/Windows 7 1491 22-07-2011 22:42
Выбор|модернизация процессора .:[все вопросы]:. Часть I Myxa Выбор отдельных компонентов компьютера и конфигурации в целом 1845 01-01-2011 19:18
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход