Ru-Board.club
← Вернуться в раздел «Программы»

» NSIS (Nullsoft Scriptable Install System)

Автор: SamLab
Дата сообщения: 18.07.2012 00:08
NSIS 13 Jul 2012 rev6246 strlen 8192 with log v2
https://mpc-build.googlecode.com/svn/trunk/nsis/nsis-13-Jul-2012-rev6246-strlen-8192-setup-v2.exe
+ полная 64-bit поддержка и размер инсталлятора может быть более 4 GB
+ полностью неограниченный размер создаваемого инсталлятора
+ avira antivirus исправлено ложное срабатывание
- пока что нет поддержки инсталлятора в solid режиме, еще не полностью портировал lzma для nsis под 64-bit с файлами более 4 GB
+ интегрировал nsis hide, чтобы нельзя было просматривать содержимое через 7-zip
+ обновил upx до v3.08
ну и добавлена поддержка длинных строк и создания логов установки
Автор: Victor_VG
Дата сообщения: 18.07.2012 00:15
SamLab

Твоя работа? Опробую при случае и отпишусь. Сейчас вот небольшая возня с железом - сменил память и надо опять всё разбирать - на морде и выдуве Zalman-ы сгорели - шестой комплект за год горит и не на одной машине!. Не кулера а 100% брак. Куплю привычный Titan как найду. А то этой рухлядью все полки завалены, а Титанов днём с огнём не сыщешь...
Автор: fursanton
Дата сообщения: 25.07.2012 02:19
Поясните тупице, не долго про NSIS читаю... но вопрос такой.
Как для программ, которые его установщиками ставятся проводить автоматическую установку, я не про тихий режим, а про возможность выбора параметров, куда ставить, какие компоненты ставит, флажки там разные выбирать и т.д.
не хочется использовать autoIT и т.п. я думаю что тут есть некое подобие файлов ответа, как в innoSetup например... или тут можно какие-то параметры передавать как в msi например?
вообщем как лучше решить данную задачу, спасибо за ответы. они же будут? )).
Автор: Victor_VG
Дата сообщения: 26.07.2012 05:05
fursanton

Плагин [more=NSExec]nsExec
------
nsExec will execute command-line based programs and capture the output
without opening a dos box.


Usage
-----
nsExec::Exec [/OEM] [/TIMEOUT=x] path

-or-

nsExec::ExecToLog [/OEM] [/TIMEOUT=x] path

-or-

nsExec::ExecToStack [/OEM] [/TIMEOUT=x] path

All functions are the same except ExecToLog will print the output
to the log window and ExecToStack will push up to ${NSIS_MAX_STRLEN}
characters of output onto the stack after the return value.

Use the /OEM switch to convert the output text from OEM to ANSI.

The timeout value is optional. The timeout is the time in
milliseconds nsExec will wait for output. If output from the
process is received, the timeout value is reset and it will
again wait for more output using the timeout value. See Return
Value for how to check if there was a timeout.

To ensure that command are executed without problems on all windows versions,
is recommended to use the following syntax:

nsExec::ExecToStack [OPTIONS] '"PATH" param1 param2 paramN'

This way the application path may contain non 8.3 paths (with spaces)

Return Value
------------
If nsExec is unable to execute the process, it will return "error"
on the top of the stack, if the process timed out it will return
"timeout", else it will return the return code from the
executed process.


Copyright Info
--------------
Copyright (c) 2002 Robert Rainwater
Thanks to Justin Frankel and Amir Szekely[/more] позволяет запустить скрытую консольную сессию и передать ей имя запускаемого модуля и параметры. Авторское описание откроется в отдельной странице если щёлкните по ссылке NSExec.
Автор: Victor_VG
Дата сообщения: 01.08.2012 06:02
По просьбе qazwsxe Обновление v1.2.1.1 для NSIS 2.4.6:

update.exe. Обновлены плагины. Сам им и пользуюсь. Всё, что вызывало сбои/сомнения не включено.

Автор: Victor_VG
Дата сообщения: 04.08.2012 16:02
Переписанное Обновление v 1.3.1.1 (полный комплект): NSIS.7z

Цитата:
NSIS 2.46 Update v1.3.1.1-1

Installer:

- Updated main installation programm;
- Found bug fixed;
- More code cleanup;

Plug-ins:

- New: NsRichEdit v1.0, SAFER v0.1;
- Updated: Locate v2.0, Processes v1.0.1.0 Fix64, Registry v4.1, ScrollLicense v0.1, nsRestartExplorer v1.4, nsProcess v1.6

Include:

- Updated ProcLib v2.11 for prevent data lost risk then process terminated.

SDK:

- Use BZip2 tarball compressed format for compatible on any systems.
Автор: Tokc
Дата сообщения: 08.08.2012 13:30
Здравствуйте.

Есть программа, есть NSIS-скрипт. Каким, наиболее простым, методом, можно добиться использования программой языка, выбранного в установщике? Для того, чтобы выбрать язык, программа использует ini-файл, который создается при первом запуске, с параметрами по умолчанию. По умолчанию всегда стоит английский. Нужно в скрипте реализовать или, допустим, копирование ini с нужными настройками, может даже его создание установщиком, но только если выбран определенный язык.

Буду рад если ответите, а пока сам продолжу копать.

Заранее спасибо.
Автор: Victor_VG
Дата сообщения: 08.08.2012 14:29
Tokc

Можете не копать, ответ простой - в мастере создания скрипта при создании его начальной основы выберите в качестве интерфейса MUI и нужные языки - это задаст ряд макросов, а дальше в дело вступит встроенная переменная $LANGUAGE которую по месту можно переопределить, например в функции .onInit. Пример как это делать Вы можете взять в моей установке Update для самого NSIS - она как раз использует русский и английский языки сообщений, весь исходный скрипт лежит в ./Examples/NSIS/NSIS_AddOns.nsi, но он не маленький, потому тут приведу только его [more=заголовок]!define MUI_ABORTWARNING
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\nsis-r.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\nsis.bmp"
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "NSIS\COPYING"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
var ICONS_GROUP
!define IMin "1"
!define IMaj "3"
!define IBld "1"
!define IRev "1"
!define IVar "1"
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "NSIS"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN "$INSTDIR\nsis.exe"
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
!ifdef HAVE_UPX
!packhdr tmpexe.tmp "upx --ultra-brute --compress-icons=0 -q tmpexe.tmp"
!endif
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "update.exe"
RequestExecutionLevel highest
AllowRootDirInstall true
XPStyle on
InstallDirRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "InstallLocation"
BrandingText "Nullsoft Scriptable Install System ${PRODUCT_VERSION} Add-Ons"
ShowInstDetails hide
ShowUnInstDetails hide
VIProductVersion "${PRODUCT_VERSION}.0.0"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Nullsoft Scriptable Install System ${PRODUCT_VERSION}. Add-Ons Components Kit."
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Install Add-Ons components for Nullsoft Scriptable Install System ${PRODUCT_VERSION}, include plugins, special compiler build for support 8192 byte string light and examples. Windows Vista compatible."
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright © 1999-2009 Nullsoft, Inc., VictorVG by © VikSoft.Ru, 1996 - 2010. All Right Reserved."
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Install Add-Ons Components for NSIS ${PRODUCT_VERSION} or higest. Compiled at ${__DATE__} on ${__TIME__}."
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${IMin}.${IMaj}.${IBld}.${IRev}-${IVar}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "InternalName" "update"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_ENGLISH} "OriginalFilename" "setup"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "ProductName" "Nullsoft Scriptable Install System ${PRODUCT_VERSION} Add-Ons Components Kit."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "Comments" "Установка дополнений для Nullsoft Scriptable Install System ${PRODUCT_VERSION} включая дополнения, специальную сборку компилятора с поддержкой строк длинной до 8192 байт и примеры. Совместимо с Windows Vista."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "CompanyName" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "LegalCopyright" "Копирайт © 1999 - 2009 Nullsoft, Inc., VictorVG by © VikSoft.Ru, 1996 - 2010. Все права защищены."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileDescription" "Установка дополнительных компонент для NSIS ${PRODUCT_VERSION} и выше. Откомпилированно ${__DATE__} в ${__TIME__}."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileVersion" "${IMin}.${IMaj}.${IBld}.${IRev}-${IVar}"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "ProductVersion" "${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "InternalName" "update"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "LegalTrademarks" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "OriginalFilename" "setup"
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
${SIDtU}
StrCmp $R1 0 +5
StrCmp $LANGUAGE "1049" +1 +2
MessageBox MB_OK|MB_ICONEXCLAMATION "Внимание! Запущена другая программа установки.$\nУстановка прекращает свою работу. Пожалуйста,$\nзапустите Установку после её завершения." IDOK +2
MessageBox MB_OK|MB_ICONEXCLAMATION "Waring! An over installer already running.$\nSetup can't continue. Please, run this$\nSetup then an over Setup is finished." IDOK +1
Quit
FunctionEnd
Section "-CheckUpdate"
Push $R0
Push $R1
ClearErrors
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "InstallLocation"
IfErrors +1 +5
StrCmp $LANGUAGE "1049" +1 +2
MessageBox MB_OK|MB_ICONSTOP "Компилятор NSIS не установлен.$\nОбновление не возможно." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "NSIS compiler not installed.$\nUpdate can't continue." IDOK +1
Quit
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NSIS" "DisplayVersion"
StrCpy $R1 $R0 4 0
ClearErrors
IntCmpU $R1 ${PRODUCT_VERSION} +5 +1 +5
StrCmp $LANGUAGE "1049" +1 +2
MessageBox MB_OK|MB_ICONSTOP "Неподдерживаемая старая версия NSIS.$\nДанное обновление требует версии NSIS ${PRODUCT_VERSION} или новее." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Unsupported old NSIS version.$\nThis Update required NSIS ${PRODUCT_VERSION} or highest."
Quit
Pop $R0
Pop $R1
Return
SectionEnd
[/more] где виден механизм выбора языка и задания параметров версии исполняемого модуля. Основную часть макросов вставит мастер, но он же и кучу комментариев добавит - они удалены чтобы не тормозили код. Я думаю, что данного куска рабочего кода Вам хватит чтобы представить себе механизмы выбора языка обычно реализуемые как проверка состояния $LANGUAGE с последующим переходом на нужный нам фрагмент кода. А в структуре VERSION_INFO наличие нескольких языков нормально - с ними сама система разбирается когда её считывает. Если будут какие вопросы - задавайте.
Автор: MKN
Дата сообщения: 08.08.2012 15:08
Tokc

Цитата:
программа использует ini-файл, который создается при первом запуске, с параметрами по умолчанию. По умолчанию всегда стоит английский. Нужно в скрипте реализовать или, допустим, копирование ini с нужными настройками, может даже его создание установщиком, но только если выбран определенный язык.

Т.е. сама программа не затрагивается, а надо только подправить установку (конкретно файл INI) , чтобы установился русский язык ?

Если так, то , как вариант, можно запустить скрипт, который в свою очередь запускает твою программу, затем детектирует создание INI, а после его обнаружения быстренько правит нужный языковой параметр в INI.
Конечно, если механизм установки этой программы, позволит так сделать...
В идеале, заморозить бы процесс установки проги, на время манипуляций с INI, но возможно ли это в данной ситуации...


Есть конечно спец утиль, типа Command Line Process Viewer/Killer/Suspender for Windows NT/2000/XP ,
в котором можно приостановить процесс установки на время (suspend Process), командой : "Process.exe -s setup.exe"
Но я не пробовал этого в NSIS.
Есть ещё интересная утилитка : http://www.windows7download.com/win7-free-process-freezer/drabnwda.html
Возможно поможет : http://www.codeproject.com/Articles/2964/Win32-process-suspend-resume-tool или
http://nsis.sourceforge.net/Nopey_-_system_setting_tool
Автор: Victor_VG
Дата сообщения: 08.08.2012 15:37
MKN

Если ставить язык в самом INI, то это ещё проще - или в зависимости от значения $LANGUAGE делаем выбор копируемого файла, а поменять в нём нужную строку вообще элементарно операцией WriteIniStr которой пишем правильное значение прямо при установке программы.
Автор: MKN
Дата сообщения: 08.08.2012 15:43
Victor_VG
Обработать INI - оно понятно как. Но позволит ли это установщик проги ? Доступ к INI файлу может быть заблокирован на время установки Или, пока скрипт NSIS шевелится, прога уже пропишет языковые параметры раньше, чем будут внесены изменения в INI... Потому и надёжнее - заморозить процесс установки проги на время обработки INI.

PS А $LANGUAGE вообще может оказаться не при делах, скрипту ведь придётся работать с посторонним INI. И мало ли какой ещё язык захочет пользователь и мало ли какая у него окажется локаль Винды...

А выбор необходимого языка, куда уж проще организовать через выбор компонентов перед началом установки. (для данного случая)
Автор: Victor_VG
Дата сообщения: 08.08.2012 16:33
MKN

Да не, это проще - я уже с Far TE3 имел бяку - Far.exe запущен - не переписался - ругань со стороны плагинов на старый Far. [more=Задачка решается на раз] в заголовке скрипта добавляем:

!include ProcLib.nsh /* или nsProcess.nsh но, тогда пиши свой парсер ошибок */

в коде, например в .onInit

Function unsuppm
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но это не поддерживаемая версия Windows.$\nУстановка ... на этой платформе невозможна." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but this unsupported Windows version.$\nSetting up .... on this platform is impossible." IDOK +1
Quit
Return
FunctionEnd
Function syserrm
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но возникла системная ошибка с кодом $R0 и Установка прервана.$\nПожалуйста, обратитесь к Администратору для решения этой проблемы." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but detected is system error code is $R0 and Setup is aborted.$\nPlease, take to Administrator for resolving this problem."
Quit
Return
FunctionEnd
Function acessd
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но у Вас нет прав для продолжения Установки.$\nПожалуйста, обратитесь к Администратору для предоставления Вам необходимых прав." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but You don't have rights for continue Setup.$\nPlease, take to Administrator for get You needed rights."
Quit
Return
FunctionEnd
Function manterm
StrCmp $lng 1049 +1 +2
MessageBox MB_OK|MB_ICONSTOP "Извините, но некоторые процессы не удалось завершить$\nавтоматически. Пожалуйста, завершите их вручную ипользуя$\nДиспетчер задач и запустите Установку снова." IDOK +2
MessageBox MB_OK|MB_ICONSTOP "Sorry, but some proces is automatical terminate is$\nfiled. Please, close this program manually using Task Manager$\nand run Setup again if You whole continue."
Quit
Return
FunctionEnd
Function .onInit
.....
${nsProcess::FindProcess} "main.exe" $R0
IntCmp $R0 603 +2 +1 lblerr
${nsProcess::CloseProcess} "main.exe" $R0
StrCmp $R0 0 end
StrCmp $R0 603 end
lblerr:
StrCmp $R0 605 +6
IntCmp $R0 606 +4 +1 +4
StrCmp $R0 601 +5
StrCmp $R0 602 +5
Call syserrm
Call unsuppm
Call acessd
Call manterm
end:
${nsProcess::Unload}
FunctionEnd[/more] и даже без два и танцев с бубном. Подобный же парсер и в ProcLib.nsh есть, и там даже свою ругань добавлять нет нужды - уже готовая есть.

А с локалью и того проще - а кто мне помешает поставить в INI язык путём расшифровки текущего значения $LANGUGE? Только придётся написать кучу StrCmp $LANGUAGE <lbl> и проваливаться вниз по мере их не выполнения поставив в конце дефолтный язык. И насчёт блокировки ты не совсем прав - если файл заблокирован для исключения потери данных лучше прервать установку, это грамотно, а иначе - риск может оказаться и 100%, и только для исключительных случаев использовать перезапись в режиме onReboot.


Автор: MKN
Дата сообщения: 08.08.2012 17:01
Victor_VG
Процесс нельзя завершать. Процесс надо приостановить, заморозить на время и возобновить вновь без потери данных.
Автор: Tokc
Дата сообщения: 08.08.2012 17:14
Всем спасибо, еще раз.

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

Продолжаю дальнейшую модификацию установщика.
Автор: MKN
Дата сообщения: 08.08.2012 17:23
Tokc
Ну вот и отлично. Жаль , что не удалось поэксперементировать с заморозкой процесса.
Интересная штука. Но видно прога твоя не затейливая, ей и простого редактирования INI достаточно.
Автор: Victor_VG
Дата сообщения: 08.08.2012 18:12
MKN

Приостановить процесс ты не сумеешь - гранаты не той системы. Это возможно только на уровне низкоуровневых вызовов ядра либо в отладчике, а они от простого пользователя убраны куда подальше, и даже прав админа для доступа к ним мало - в их ACL стоит уровень доступа Local System

А что до "приостановить" то, такое можно сделать только с демоном, и то не всяким через вызовы SCM, раз, или используя команды net stop/pause/start - два. И ещё после того, как ты возобновил процесс из стояния "Пауза" далеко не всякий процесс заново перепроверяет свои конфиги на предмет поиска возможных изменений и принятия их "на лету". "Заморозка" как механизм это простое копирование дампа всей области ОЗУ процесса вместе с его MSW (Machine Stamens Word), адресом текущей машинной команды (точка приостановки выполнения) и регистрами ЦП на внешнюю память с последующим освобождением занимаемого им ОЗУ и пометкой в таблицах задач ОС "состояние исполнения - пауза", а при его возобновлении копирование их же обратно и передача управления на точку приостановки выполнения и снятие флага "Пауза" в таблицах планировщика задач.

Так, что это не так-то просто как кажется на первый взгляд....
Автор: raer000r
Дата сообщения: 26.09.2012 19:27
[more] Не могу никак сделать так чтобы когда возвращаешься назад, по умолчанию флажки и прочее были сняты. получается отмечено два флажка. помогите



Var Dialog
Var RadioButton1
Var RadioButton1_State
Var RadioButton2
Var RadioButton2_State

Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog


${NSD_CreateRadioButton} 0 5u 100u 10u "программа первая"
Pop $RadioButton1


${NSD_CreateRadioButton} 0 18u 100u 10u "программа вторая"
Pop $RadioButton2


${If} $RadioButton2_State == ${BST_CHECKED}
${NSD_Check} $RadioButton2
StrCmp $RadioButton2_State "1" Yes No
Yes:
    MessageBox MB_OK "должна работать"
    StrCpy $RadioButton1_State "0"
    Goto Next
No:
    
Next:
${EndIf}

${NSD_SetState} $RadioButton1 1


nsDialogs::Show
FunctionEnd


Function nsDialogsPageLeave
${NSD_GetState} $RadioButton2 $RadioButton2_State
FunctionEnd [/more]
Автор: kot280379
Дата сообщения: 14.10.2012 13:22
raer000r
пробуй так...
[more=Примерно]
Код: !include "MUI2.nsh"

!insertmacro MUI_Page_WELCOME
Page custom nsDialogsPage nsDialogsPageLeave
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

InstallDir $EXEDIR

OutFile nsDialogs.exe

Var Dialog
Var RadioButton1
Var RadioButton2
Var RadioButton1_State
Var RadioButton2_State

Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
${NSD_CreateRadioButton} 0 5u 100u 10u "RadioButton1"
Pop $RadioButton1
${NSD_CreateRadioButton} 0 18u 100u 10u "RadioButton2"
Pop $RadioButton2

${NSD_OnClick} $RadioButton1 ClickRadioButton
${NSD_OnClick} $RadioButton2 ClickRadioButton

${If} $RadioButton1_State == 1
${NSD_SetState} $RadioButton1 1
${NSD_SetState} $RadioButton2 0
${ElseIf} $RadioButton2_State == 1
${NSD_SetState} $RadioButton1 0
${NSD_SetState} $RadioButton2 1
${Else}
${NSD_SetState} $RadioButton1 1
${NSD_SetState} $RadioButton2 0
${EndIf}
nsDialogs::Show
FunctionEnd

Function ClickRadioButton
${NSD_GetState} $RadioButton1 $RadioButton1_State
${NSD_GetState} $RadioButton2 $RadioButton2_State
FunctionEnd

Function nsDialogsPageLeave
${NSD_GetState} $RadioButton1 $RadioButton1_State
${NSD_GetState} $RadioButton2 $RadioButton2_State
FunctionEnd

Section
MessageBox MB_ICONINFORMATION|MB_OK "RadioButton1 = $RadioButton1_State$\n\
RadioButton2 = $RadioButton2_State" IDOK
SectionEnd
Автор: raer000r
Дата сообщения: 14.10.2012 23:28
kot280379
спасибо, разобрался.
можно ли каждой секции назначить папку по молчанию? еще я испльзую команду addsize и у меня не получается задать каждой секции СВОЙ размер. общий получается
Автор: kot280379
Дата сообщения: 15.10.2012 00:07

Цитата:
можно ли каждой секции назначить папку по молчанию?

SetOutPath "папка"
это команда назначит папку установки...
прописываешь в каждой секции.. т.е столько раз, сколько необходимо...
контролируешь папку установки (для отладки) переменной:

Код: MessageBox MB_OK "$OUTDIR" IDOK
Автор: raer000r
Дата сообщения: 15.10.2012 12:21

Цитата:
SetOutPath "папка"

SetOutPath "$INSTDIR" вот так у меня. иначе папка по умолчанию будет использоваться всегда, даже если выбрать другую для установки. Или я не прав?
Цитата:
nsis "сам рассчитывает" размер устанавливаемых файлов из странички компонентов (секции)

Очевидно, на стандартной странице выбора компонентов. А у меня самодельная страница. Логический вес - 4 мегабайта. Хоть первый флажок, хоть второй - все по 4. На самом деле
первый - 1,92м второй - 2,16.
Автор: kot280379
Дата сообщения: 16.10.2012 10:22

Цитата:
А у меня самодельная страница

делаете CreateLabel c нужной надписью, при переключении изменяете содержимое надписи...
событием ${NSD_OnClick} для каждого радиобутона своя функция изменения надписи.
---
Addsize - только для стандартной странички компонентов.
Автор: raer000r
Дата сообщения: 16.10.2012 12:49
kot280379
ясна. А если я решил реализовать тихую установку и у меня самодельная страница, то тоже надо дополнительные команды вписывать? а то чет у меня на работает.
и хотелось бы узнать как свои ключи для тихой установки сделать. например /S - для программа 1 (1 флажок), /I - для программа 2 (второй флажок). видал такое
Автор: qqwwrr
Дата сообщения: 16.10.2012 15:27
убрал из шапки
[ Русский сайт об инсталляторе Nullsoft Scriptable Install System ]


такого сайта давно нет вживых...
Автор: raer000r
Дата сообщения: 16.10.2012 16:09
qqwwrr
а чей был сайт?
Автор: kot280379
Дата сообщения: 16.10.2012 21:35

Цитата:
А если я решил реализовать тихую установку и у меня самодельная страница

самопалки в тихую и с ключами не работают...
но можно заставить и очень просто... добавьте выше выложенный код кусок скрипта:
[more=пример]
Код: !include "filefunc.nsh"
Function .onInit
${If} ${Silent}
${GetOptions} "$CMDLINE" "proga=" $R0
${If} $R0 == 1
StrCpy $RadioButton1_State 1
StrCpy $RadioButton2_State 0
${ElseIf} $R0 == 2
StrCpy $RadioButton1_State 0
StrCpy $RadioButton2_State 1
${Else}
ClearErrors
${EndIf}
${EndIf}
FunctionEnd
Автор: raer000r
Дата сообщения: 16.10.2012 22:19

Цитата:
самопалки в тихую и с ключами не работают

В каком смысле??
[more=читать] http://i45.fastpic.ru/big/2012/1016/df/c4bae4adfe836c5d8478a2ef703d19df.png[/more]
Здесь какая то черная магия, недоступная простолюдинам? очень жалко
А что ты понимаешь под самопалкой?

ааа. заработала. только проблемка. я указал в инсталляторе прописать кучку значений в реестре и Зделать ярлыки (ага, я сделал еще пару штук чекбоксов)
Чувствую это все надо прописать в функцию тихой установки? что же он такой тупенький.


иеще. пришлось .onInit перенести ниже переменных Var. иначе фн. не может их найти. а нельзя другую функцию использовать а onInit оставить выше?
Автор: kot280379
Дата сообщения: 16.10.2012 23:17

Цитата:
.onInit

в любом удобном месте... в этой функции очень удобна

Цитата:
Чувствую это все надо прописать в функцию тихой установки?

конечно! только это не функция тихой установки...а на принципе флага тихой установки
смысл здесь - меняем значения статусов радиобатонов,
как будто на кастомной страничке мышкой жмякаем...
далее в секциях простоя проверка:

Код: Section
${If} $RadioButton1_State == 1 ;если радиобатон 1 отмечен (1 глобальное условие)

;пишем сюда все нужные команды (местные условия по чекбоксам) и т.д
;радибутон 1 отмечен!

${ElseIf} $RadioButton2_State == 1 ;если радиобатон 2 отмечен (2 глобальное условие)

;пишем сюда все нужные команды (местные условия по чекбоксам) и т.д
;радибутон 2 отмечен!
${EndIf}
SectionEnd
Автор: raer000r
Дата сообщения: 17.10.2012 13:37
Как можно сделать так чтобы если после установки программы требуется перезапуск ОС установщик выводил messagebox перегрузить сейчас да нет? и также после удаления. только если это необходимо
Автор: KloneBADGuY
Дата сообщения: 28.10.2012 15:34
Диалог с перезагрузкой:

Код: BringToFront
MessageBox MB_YESNO|MB_ICONINFORMATION "Перезагрузить компьютер сейчас?" IDYES +2
Quit
Reboot

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

Предыдущая тема: The Bat!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.