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

Компьютерный форум 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

 
MKN MKN вне форума

Ветеран


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

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


Цитата Limonica:
существуют же не только N редакции но и K и KN как быть с ними? »
Никак. Это же редкая экзотика... Особенно К (для Кореи) http://it-padla.blogspot.ru/2009/08/windows-7.html
Да и основное отличие от нормальных редакций - в отсутствии Windows Media Player. И уж не WinVer.nsh должен это отличие детектировать...

Для практики, в подавляющем большинстве случаев, вполне достаточно исчерпывающей информации из
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
Извлёк нужную инфу, сравнил и сделал вывод. По Win 8 включительно, почти все данные об ОС известны...
Например, http://en.wikipedia.org/wiki/Compari...ndows_versions
http://en.wikipedia.org/wiki/Development_of_Windows_7

Цитата Limonica:
ProcessFunc.nsh недавно выложенная тоже не работает в самой последней версии »
Если имеется ввиду хедер из моего поста, то это альтернативный вариант, причём, для некоторых случаев, не совсем удачный...
А хедер от kotkovets (который в справочнике) работает ?

ps Для разнообразия, последние летние WinVer.nsh

Последний раз редактировалось MKN, 27-05-2020 в 16:17.

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

Отправлено: 09:27, 30-09-2013 | #561



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

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


Аватара для kotkovets

Ветеран


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

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


Цитата Limonica:
kotkovets, есть ли обнова WinVer2.nsh c правильным отображением Windows 8 и 8.1 ? »
скоро будет.. выложу..
Цитата Limonica:
ProcessFunc.nsh недавно выложенная тоже не работает в самой последней верси »
не надо... все работает..

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


Отправлено: 19:16, 30-09-2013 | #562

MKN MKN вне форума

Ветеран


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

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


Код программы "Font Viewer" :
(от китайских товарищей. Перевод гугловский, может быть не точен... )
читать дальше »
Код: Выделить весь код
!include MUI2.nsh
!include nsWindows.nsh
!include WinCore.nsh

!define BS_SOLID                0
!define BS_NULL                 1
!define TRANSPARENT             1
!define OPAQUE                  2
!define CC_TEXT                 1
!define CC_BK                   4
!define CC_BKB                  16
!define GWL_USERDATA            -21

!define CF_SCREENFONTS          0x00000001
!define CF_PRINTERFONTS         0x00000002
!define CF_BOTH                 ${CF_SCREENFONTS}|${CF_PRINTERFONTS}
!define CF_SHOWHELP             0x00000004
!define CF_ENABLEHOOK           0x00000008
!define CF_ENABLETEMPLATE       0x00000010
!define CF_ENABLETEMPLATEHANDLE 0x00000020
!define CF_INITTOLOGFONTSTRUCT  0x00000040
!define CF_USESTYLE             0x00000080
!define CF_EFFECTS              0x00000100
!define CF_APPLY                0x00000200
!define CF_ANSIONLY             0x00000400
#if(WINVER >= 0x0400)
!define CF_SCRIPTSONLY          ${CF_ANSIONLY}
#endif /* WINVER >= 0x0400 */
!define CF_NOVECTORFONTS        0x00000800
!define CF_NOOEMFONTS           ${CF_NOVECTORFONTS}
!define CF_NOSIMULATIONS        0x00001000
!define CF_LIMITSIZE            0x00002000
!define CF_FIXEDPITCHONLY       0x00004000
!define CF_WYSIWYG              0x00008000 #// must also have CF_SCREENFONTS & CF_PRINTERFONTS
!define CF_FORCEFONTEXIST       0x00010000
!define CF_SCALABLEONLY         0x00020000
!define CF_TTONLY               0x00040000
!define CF_NOFACESEL            0x00080000
!define CF_NOSTYLESEL           0x00100000
!define CF_NOSIZESEL            0x00200000
#if(WINVER >= 0x0400)
!define CF_SELECTSCRIPT         0x00400000
!define CF_NOSCRIPTSEL          0x00800000
!define CF_NOVERTFONTS          0x01000000
#endif /* WINVER >= 0x0400 */

!define BOLD_FONTTYPE           0x0100
!define ITALIC_FONTTYPE         0x0200
!define REGULAR_FONTTYPE        0x0400
!define SCREEN_FONTTYPE         0x2000
!define PRINTER_FONTTYPE        0x4000
!define SIMULATED_FONTTYPE      0x8000

!define CF_TEXT                 1
!define CF_BITMAP               2
!define CF_METAFILEPICT         3
!define CF_SYLK                 4
!define CF_DIF                  5
!define CF_TIFF                 6
!define CF_OEMTEXT              7
!define CF_DIB                  8
!define CF_PALETTE              9
!define CF_PENDATA              10
!define CF_RIFF                 11
!define CF_WAVE                 12
!define CF_UNICODETEXT          13
!define CF_ENHMETAFILE          14
!define CF_HDROP                15
!define CF_LOCALE               16
!define CF_DIBV5                17

!define CF_PRIVATEFIRST         0x0200
!define CF_PRIVATELAST          0x02FF
!define CF_GDIOBJFIRST          0x0300
!define CF_GDIOBJLAST           0x03FF
!define CF_OWNERDISPLAY         0x0080
!define CF_DSPTEXT              0x0081
!define CF_DSPBITMAP            0x0082
!define CF_DSPMETAFILEPICT      0x0083
!define CF_DSPENHMETAFILE       0x008E

!define GMEM_FIXED              0x0000
!define GMEM_MOVEABLE           0x0002
!define GMEM_ZEROINIT           0x0040
!define GPTR                    ${GMEM_FIXED}|${GMEM_ZEROINIT}
!define GHND                    ${GMEM_MOVEABLE}|${GMEM_ZEROINIT}

Name ChooseFont
Caption ChooseFont
OutFile ChooseFont.exe
XPStyle on

Page custom Page.Create
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE "English"

Var HWND

Function Page.Create

  !insertmacro MUI_HEADER_TEXT "ChooseFont Function" "ChooseFont"

  nsDialogs::Create 1018
  Pop $HWND

  nsDialogs::CreateControl ${__NSD_Label_Class} ${__NSD_Label_STYLE}|${SS_CENTER}|${SS_CENTERIMAGE} \
                           ${WS_EX_CLIENTEDGE}|${WS_EX_WINDOWEDGE} 0u 0u 300u 50u "Просмотр шрифта"
  Pop $0

  ${NSD_CreateButton} 250u 54u 50u 14u "Шрифт"
  Pop $1
  ${NSD_OnClick} $1 ChooseFont

  ${NSD_CreateLabel} 0u 57u 80u 8u "LOGFONT : "
  Pop $3
  ${NSD_CreateLabel} 80u 57u 20u 8u ""
  Pop $3

  ${NSD_CreateLabel} 72u 72u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 72u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 82u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 82u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 92u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 92u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 102u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 102u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 112u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 112u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 122u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 122u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 72u 132u 78u 8u ""
  Pop $3
  ${NSD_CreateLabel} 222u 132u 78u 8u ""
  Pop $3

  ${NSD_CreateLabel} 0u 72u 72u 8u "iPointSize: "
  Pop $3
  ${NSD_CreateLabel} 150u 72u 72u 8u "rgbColors: "
  Pop $3
  ${NSD_CreateLabel} 0u 82u 72u 8u "lfEscapement: "
  Pop $3
  ${NSD_CreateLabel} 150u 82u 72u 8u "lfOrientation: "
  Pop $3
  ${NSD_CreateLabel} 0u 92u 72u 8u "lfWeight: "
  Pop $3
  ${NSD_CreateLabel} 150u 92u 72u 8u "lfItalic: "
  Pop $3
  ${NSD_CreateLabel} 0u 102u 72u 8u "lfUnderline: "
  Pop $3
  ${NSD_CreateLabel} 150u 102u 72u 8u "lfStrikeOut: "
  Pop $3
  ${NSD_CreateLabel} 0u 112u 72u 8u "lfCharSet: "
  Pop $3
  ${NSD_CreateLabel} 150u 112u 72u 8u "lfOutPrecision: "
  Pop $3
  ${NSD_CreateLabel} 0u 122u 72u 8u "lfClipPrecision: "
  Pop $3
  ${NSD_CreateLabel} 150u 122u 72u 8u "lfQuality: "
  Pop $3
  ${NSD_CreateLabel} 0u 132u 72u 8u "lfPitchAndFamily: "
  Pop $3
  ${NSD_CreateLabel} 150u 132u 72u 8u "lfFaceName: "
  Pop $3

  ${NSD_CreateText} 100u 55u 145u 12u "Образец"
  Pop $3
  ${NSD_OnChange} $3 SetSampleText

  nsDialogs::Show
FunctionEnd

Function ChooseFont

  IntCmpU 0 $R0 0 +5
  #Создать структуру LOGFONT
  ; GetDC извлекает дескриптор дисплейного контекста устройства (DC) для рабочей области заданного окна или для всего экрана
  ;(Идентифицирует контекст устройства для CWnd клиентской области)
  System::Call `user32::GetDC(in)i.s`
  ; GetDeviceCaps извлекает зависимую от устройства информацию для заданного устройства
  ; LOGPIXELSX	Число пикселей на логический дюйм по экранной ширине. В системе с многоэкранными мониторами, это значение одно и то же  для всех  мониторов. 
  System::Call `gdi32::GetDeviceCaps(is,i${LOGPIXELSX})i.s`
  
  ; Умножение двух 32-битных значений, а затем делит 64-битный результат на треть 32-битное значение.  
  ;Окончательный результат округляется до ближайшего целого числа.
  System::Call `kernel32::MulDiv(i9,is,i72)i.s`
  System::Call `*(is,i,i,i,i,&i1,&i1,&i1,&i1,&i1,&i1,&i1,&i1,&t32"Tahoma")i.R0`
  
  #Создать структуру CHOOSEFONT
  System::Call `*(i60,i$HWNDPARENT,i20,iR0,i,i${CF_INITTOLOGFONTSTRUCT}|${CF_BOTH}|${CF_EFFECTS}|${CF_NOVERTFONTS}|${CF_NOOEMFONTS},ir4,i,i,i,i,i,&i2,i,i)i.R1`
  System::Call `comdlg32::ChooseFont(iR1)i.r2`
  IntCmp $2 0 end

  #Пользователь выбирает выходные параметры шрифта
  System::Call `*$R0(i.s,i.s,i.s,i.s,i.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&t32.s)`
  #Согласно информации, для создания шрифта
  System::Call `gdi32::CreateFont(is,is,is,is,is,is,is,is,is,is,is,is,is,ts)i.s`
  #Установка области, предварительного просмотра шрифта
  System::Call `user32::SendMessage(ir0,i${WM_SETFONT},is,i0)`

  #Пользователь выбирает выходные параметры шрифта
  System::Call `*$R0(i,i,i.s,i.s,i.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&i1.s,&t32.s)`
  #Размер  и цвет
  System::Call `*$R1(i,i,i,i,i.s,i,i.r4,i,i,i,i,i,&i2,i,i)`
  #SetCtlColors Нельзя использовать переменные
  #Следующие две строки для установки цвета 
  System::Call `*(ir4,i0,i${BS_NULL},i0,i${TRANSPARENT},i${CC_TEXT}|${CC_BKB})i.r5`
  System::Call `user32::SetWindowLong(ir0,i${GWL_USERDATA},lr5)`
  #обновить окно
  System::Call `user32::ShowWindow(ir0,i${SW_HIDE})`
  System::Call `user32::ShowWindow(ir0,i${SW_SHOW})`

  #Размер дисплея, и шрифт информационной структуры
  System::Call `*$R0(&l.s)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1203,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1204,i${WM_SETTEXT},i0,ts)`
  #Цвет строки форматирования
  IntFmt $4 0x%06X $4
  System::Call `user32::GetDlgItem(i$HWND,i1205)i.r6`
  System::Call `user32::SendMessage(ir6,i${WM_SETTEXT},i0,tr4)`
  System::Call `user32::SetWindowLong(ir6,i${GWL_USERDATA},lr5)`
  System::Call `user32::ShowWindow(ir6,i${SW_HIDE})`
  System::Call `user32::ShowWindow(ir6,i${SW_SHOW})`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1206,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1207,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1208,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1209,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1210,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1211,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1212,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1213,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1214,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1215,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::SendDlgItemMessage(i$HWND,i1216,i${WM_SETTEXT},i0,ts)`

  System::Call `user32::SendDlgItemMessage(i$HWND,i1217,i${WM_SETTEXT},i0,ts)`
  System::Free $R1
  end:
FunctionEnd

Function SetSampleText
  System::Call `user32::SendDlgItemMessage(i$HWND,i1232,i${WM_GETTEXT},i${NSIS_MAX_STRLEN},t.s)`
  System::Call `user32::SendMessage(ir0,i${WM_SETTEXT},i0,ts)`
  System::Call `user32::ShowWindow(ir0,i${SW_HIDE})`
  System::Call `user32::ShowWindow(ir0,i${SW_SHOW})`
FunctionEnd

Function .onGUIEnd
  System::Free $R0
  System::Free $5
FunctionEnd

Section 
SectionEnd
PS после компиляции будет немного ругани, не влияющей на работоспособность. И похоже опять - из nsWindows.nsh...

Последний раз редактировалось MKN, 02-10-2013 в 16:45.


Отправлено: 17:39, 01-10-2013 | #563

MKN MKN вне форума

Ветеран


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

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


Информация об установленных жестких дисках.

Может быть получена при помощи спец. DLL и следующего кода :
читать дальше »
Код: Выделить весь код
!AddPluginDir .
!include "LogicLib.nsh"
Caption "HardDisk Info"
OutFile "GetHardDiskInfo.exe"

Section
StrCpy $0 0
${Do}
	HddInfo::GetModelNumber $0
	Pop $1
	${IfThen} $1 == "" ${|} ${ExitDo} ${|}
	HddInfo::GetSerialNumber $0
	Pop $2
	HddInfo::GetBufferSize $0
	Pop $3
	HddInfo::GetDiskSize $0
	Pop $4
	Call GetDiskPos
	MessageBox MB_ICONINFORMATION|MB_OK "Жесткий диск (HDD $0)  модель: $1 $\r$\n\
	Cерийный номер : $2 $\r$\n\
	Размер кэш-памяти : $3 $\r$\n\
	Объём жесткого диска: $4 $\r$\n\
	Установлен (подключен) как : $R0"
IntOp $0 $0 + 1
${Loop}
SectionEnd

Function GetDiskPos
	Intop $R0 $0 / 2
	${Select} $R0
	${Case} "0"
		StrCpy $R1 "Primary"
	${Case} "1"
	    StrCpy $R1 "Secondary"
	${Case} "2"
	    StrCpy $R1 "Tertiary"
	${Case} "3"
	    StrCpy $R1 "Quaternary"
	${EndSelect}
	
	Intop $R0 $0 % 2
	${Select} $R0
	${Case} "0"
		StrCpy $R0 "Master"
	${Case} "1"
	    StrCpy $R0 "Slave"
 	${EndSelect}
 	StrCpy $R0 "$R1 $R0"
FunctionEnd

Последний раз редактировалось MKN, 27-05-2020 в 16:17.

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

Отправлено: 16:40, 02-10-2013 | #564


Аватара для alexfinik

Новый участник


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

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


Не могу понять как использовать массивы nsArray или NSISArray((
Как это сделать? Может кто-то привести программку, которая сначала задает массив z[0]=a, z[1]=b, z[2]=c, z[3]=d, z[4]=e с последующей выдачей

Код: Выделить весь код
${ForEach} $i 0 4 + 1
	MessageBox MB_OK $z[$i]
${Next}
Что-то типа того... Мануалов как-то негусто... По примерам - не все работают. Может потому что у меня unicode-версия...

-------
Спасибо за помощь!


Отправлено: 19:29, 02-10-2013 | #565


Аватара для kotkovets

Ветеран


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

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


Цитата:
Не могу понять как использовать
массивы nsArray или NSISArray
читать дальше »
Код: Выделить весь код
!include MUI2.nsh
!include NSISArray.nsh

Name 'Write'
OutFile 'NSISArrayExample.exe'

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

${Array} "Ar_1" 1 4 ;объявляем массив "Ar_1"
${ArrayFunc} Write ;объявляем функции массива  "Ar_1"
${ArrayFunc} Read  ;

Section

  ${Ar_1->Init} ;иницилизируем массив "Ar_1"

  ; запол "Ar_1"
  ${Ar_1->Write} 0 "Что-то"
  ${Ar_1->Write} 1 "типа"
  ${Ar_1->Write} 2 "того"
  ${Ar_1->Write} 3 "массив"
  ${Ar_1->Write} 4 "работает"
  
  ; читаем массив "Ar_1"
  ${ForEach} $R1 0 4 + 1
      ${Ar_1->Read} $R0 $R1
      MessageBox MB_OK "Ar_1[$R1]=$R0" IDOK
  ${Next}
  
  ${Ar_1->Delete} ;удаляем массив "Ar_1"

SectionEnd

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

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

Отправлено: 11:17, 03-10-2013 | #566


Аватара для alexfinik

Новый участник


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

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


Еще вопрос. Не смог понять и найти как задать размер окна в nsDialogs. Например где тут задавать? В мануале не нашел. Там только описание всяких операторов. Спасибо!
Код: Выделить весь код
Function nsDialogsPage1

	nsDialogs::Create 1018
	
	Pop $Dialog
	${If} $Dialog == error
		Abort
	${EndIf}
	
	${NSD_CreateLabel} 0 0 100% 12u "Label1"
	Pop $Label1
	${NSD_CreateText} 0 13u 100% 12u "X"
	Pop $X

	
	nsDialogs::Show

FunctionEnd

-------
Спасибо за помощь!


Отправлено: 19:58, 03-10-2013 | #567


Аватара для kotkovets

Ветеран


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

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


Цитата alexfinik:
Еще вопрос. Не смог понять и найти как задать размер окна в nsDialogs. Например где тут задавать? В мануале не нашел »
а он, диалог, по умолчанию задается в ресурсах установщика

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


Отправлено: 22:37, 03-10-2013 | #568


Аватара для alexfinik

Новый участник


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

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


kotkovets, Не понял слово "ресурсы" в этом контексте, но правильно ли я понимаю, что невозможно в ходе программы размер окна поменять? Что же делать, если мне нужно создать окно то с 1, то с 10 полями, в зависимости от того, что выберет пользователь?

-------
Спасибо за помощь!


Отправлено: 10:39, 04-10-2013 | #569

MKN MKN вне форума

Ветеран


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

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


Цитата alexfinik:
что невозможно в ходе программы размер окна поменять? »
Не совсем ясно, что означает "в ходе программы" ? А вообще, самое простое для изменения размера окон - использовать плагин nsResize. Или, если не лень, размер окон можно изменять с помощью System плагина, вызывая соответствующие API.

Отправлено: 11:54, 04-10-2013 | #570



Компьютерный форум 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




 
Переход