[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 62
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Ребята, опять заблудился.

Делаю сборку Opera.

Такие секции:





Function .onInit

StrCpy $SysDrive $WINDIR 2

StrCpy $1 ${Sec03}

FunctionEnd



Section "Многопользовательская установка" Sec03

SetOutPath "$INSTDIR"

WriteINIStr "$INSTDIR\operaprefs_default.ini" "System" "Multi User" "1"

SectionEnd

;

Section /o "Однопользовательская установка" Sec04

SetOutPath "$INSTDIR"

WriteINIStr "$INSTDIR\operaprefs_default.ini" "System" "Multi User" "0"

SectionEnd



Function .onSelChange

!insertmacro StartRadioButtons $1

!insertmacro RadioButton ${Sec03}

!insertmacro RadioButton ${Sec04}

!insertmacro EndRadioButtons

FunctionEnd





Кнопки 3 и 4 переключаются, но только не с первого раза. В первый клик кнопка 3 не выключается. Получаются обе секции включенными...
Аватара пользователя
Krinkels

Re: [архив].: NSIS - все вопросы :.

Сообщение Krinkels »

wolkow70,

функцию .onInit переместите в скрипте - пропишите после всех секций, для корректного определения индетификаторов секций, вас же компилятор просит же... Изображение

для NSIS последовательность действий очень важна!
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Товарищи, делаю сборку Ligth Alloy прописал с ассоциациями такие команды:



StrCpy $OpenCommand "$INSTDIR\LA.exe $\"%1$\""

StrCpy $PlayCommand "$INSTDIR\LA.exe $\"%1$\""

StrCpy $QueneCommand "$INSTDIR\LA.exe $\"%1$\" /ADD"





"Воспроизвести в LA" работает

"Открыть в LA работает"

Открыть файл двойным щелчком не работает. Приходится ткнуть кнопку воспроизведения.

С оригинальным инсталлятором все работает.

Что нужно поправить?
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

wolkow70

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

А то Вы сразу за штурвал МиГ-19 , минуя У-2
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

DruOleg, Вам уже не мало примеров приводили на макросе LineFind

В справке по индексу LineFind - читайте и изучайте


Цитата DruOleg:



добавлять строки в конец файла, но не за пределами закрытия php-скрипта, т. е. перед "?>" ?
[архив].: NSIS - все вопросы :.




Пример все тот же на LineFind перед "?>" запишет nsis



Код:

Код: Выделить всё

Function Replace
  ${If} $R9 == "?>"
  ${OrIf} $R9 == "?>$\r$\n"
  ${OrIf} $R9 == "?>$\r"
  ${OrIf} $R9 == "?>$\n"
    StrCpy $R9 "nsis$\r$\n?>$\r$\n"
    ;------
    ;------
    ;------
  ${EndIf}
  Push $0
FunctionEnd


Цитата DruOleg:



добавлять строки в конец файла
[архив].: NSIS - все вопросы :.






Код:

Код: Выделить всё

;---
FileSeek $0 0 End
FileWrite $0 "$\r$\n$$CFG->dbtype = '$$DBtype'$\n$\r"


Цитата DruOleg:



как добавить между строками разрыв (Enter)?
[архив].: NSIS - все вопросы :.




$\n - переместить каретку на новую строку

$\r - переместить каретку на начало строки

$\n$\r - переместить каретку на начало новой строки

$\t - знак табуляции, клавиша
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Kotkovets, посоветуй, пожалуйста, по следующим вопросам.



Для страниц инсталлятора я использую .ini файл с настройками элементов на странице.

Я нашел решение типа, где поля создаются напрямую в функции:



${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..."

Pop $Text

${NSD_OnChange} $Text fnTextChange



Вопрос 1: как я могу присоединить функцию к событию элемента в моем случае



!insertmacro MUI_INSTALLOPTIONS_WRITE "ProgramPath.ini" "Field 2" "Flag" "DISABLED" - этот код почему то не делает не активным текстовое поле.



Вопрос 2: как изменить активность элемента?



У меня не получается прописать путь по умолчанию в текстовое поле кодом в функции страницы:

!insertmacro MUI_INSTALLOPTIONS_WRITE "ProgramPath.ini" "Field 1" "State" "C:\ProgramFolder"



Вопрос 3: как прописать текст в текстовое поле до отображения страницы?





Код скрипта в скрытом тексте


читать дальше »


!include "Library.nsh"

!include "sections.nsh"

!include "MUI.nsh"

!include "LogicLib.nsh"

!include "OLEDB.NSH"



Name "Declarant TS"

Caption "Установка программы Declarant TS"

OutFile "InstallDeclarantTS.exe"

InstallDir "C:\GTD"

ShowInstDetails show



!define MUI_COMPONENTSPAGE_SMALLDESC

!define MUI_FINISHPAGE_NOAUTOCLOSE



Var IsInstallDB

Var ProgramFolderPath

Var DBFileFolderPath



Var ServerName

Var UserName

Var UserPathword

;Var ServerInstance



;----Страницы шагов--------

PageEx custom

PageCallBacks EnterWelcomePage LeaveWelcomePage

PageExEnd



PageEx custom

PageCallBacks EnterPathPage LeavePathPage

PageExEnd



PageEx custom

PageCallBacks EnterServerAdjustmentsPage LeaveServerAdjustmentsPage

PageExEnd



!insertmacro MUI_PAGE_INSTFILES

;---------------------------------



!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

!insertmacro MUI_LANGUAGE "Russian"



Function .onInit

InitPluginsDir

!insertmacro MUI_INSTALLOPTIONS_EXTRACT "Welcome.ini"

!insertmacro MUI_INSTALLOPTIONS_EXTRACT "ProgramPath.ini"

!insertmacro MUI_INSTALLOPTIONS_EXTRACT "ServerAdjustments.ini"

FunctionEnd



Function CheckConnection



${OLEDB}::SQL_Logon "$ServerName" "$UserName" "$UserPathword"

Pop $0

${If} $0 == 0

MessageBox MB_OK "Соединение успешно установлено!"

${Else}

MessageBox MB_OK "Попытка соединения завершилась неудачно!"

${EndIf}



FunctionEnd



Section ""



detailprint "Подключение к серверу $ServerName"



${OLEDB}::SQL_Logon "" "" "" ;"$ServerName" "$UserName" "$UserPathword"

Pop $0

;${If} $0 == 1

DetailPrint $0

Pop $0

DetailPrint $0

;${EndIf}



${OLEDB}::SQL_ExecuteScript "test.sql"

Pop $0

;${If} $0 == 1

Pop $0

DetailPrint $0

;${EndIf}



detailprint ""

detailprint "Копирование файлов"

SetOutPath $ProgramFolderPath

File Files\Antlr3.Runtime.dll

File Files\Castle.Core.dll

File Files\Castle.DynamicProxy2.dll

File Files\Castle.DynamicProxy.dll

File Files\Core.dll

File Files\Core.Impl.dll

File Files\DBConnectionParameters.xml

File Files\Declaration.Domain.Impl.dll

File Files\Declaration.Presenters.Impl.dll

File Files\Declaration.Views.dll

File Files\Declaration.Views.Impl.dll

File Files\DeclarationElectronicCopy.dll

File Files\Domain.Impl.dll

File Files\Enums.dll

File Files\Events.dll

File Files\Handbooks.Domain.dll

File Files\Handbooks.Presenters.dll

File Files\Handbooks.Presenters.Impl.dll

File Files\Handbooks.Views.dll

File Files\Handbooks.Views.Impl.dll

File Files\Iesi.Collections.dll

File Files\Injection.dll

File Files\Injection.Impl.dll

File Files\local.hibernate.cfg.xml

File Files\log4net.dll

File Files\Main.Presenters.dll

File Files\Main.Presenters.Impl.dll

File Files\Main.Views.dll

File Files\Main.Views.Impl.dll

File Files\NHibernate.ByteCode.Castle.dll

File Files\NHibernate.dll

File Files\nhibernate-configuration.xsd

File Files\nhibernate-mapping.xsd

File Files\Ninject.dll

File Files\nunit.core.dll

File Files\nunit.framework.dll

File Files\Print.dll

File Files\ProgramAdjustments.xml

File Files\remote.hibernate.cfg.xml

File Files\Repositories.dll

File Files\Repositories.Impl.dll

File Files\Screen.Presenters.dll

File Files\Screen.Presenters.Impl.dll

File Files\Screen.Views.dll

File Files\Screen.Views.Impl.dll

File Files\Services.dll

File Files\sqlceca35.dll

File Files\sqlcecompact35.dll

File Files\sqlceer35EN.dll

File Files\sqlceer35RU.dll

File Files\sqlceme35.dll

File Files\sqlceoledb35.dll

File Files\sqlceqp35.dll

File Files\sqlcese35.dll

File Files\System.Data.SqlServerCe.dll

File Files\System.Data.SqlServerCe.Entity.dll

File Files\DeclarantTS.exe



CreateShortCut "C:\Documents and Settings\All Users\Рабочий стол\DeclarantTS.lnk" "$ProgramFolderPath\DeclarantTS.exe"

SectionEnd



Function EnterWelcomePage

!insertmacro MUI_HEADER_TEXT "Приветствие" "Вас приветствует мастер установки Declarant TS"

!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "Welcome.ini"

!insertmacro MUI_INSTALLOPTIONS_SHOW

FunctionEnd



Function LeaveWelcomePage

!insertmacro MUI_INSTALLOPTIONS_READ $IsInstallDB "Welcome.ini" "Field 1" "State"

FunctionEnd



Function EnterPathPage

!insertmacro MUI_HEADER_TEXT "Выбор путей" "Выберите папки,куда требуется установить программу"

!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "ProgramPath.ini"

!insertmacro MUI_INSTALLOPTIONS_SHOW

!insertmacro MUI_INSTALLOPTIONS_WRITE "ProgramPath.ini" "Field 1" "State" "C:\ProgramFolder"



${if} $IsInstallDB == 0

;!insertmacro MUI_INSTALLOPTIONS_WRITE "ProgramPath.ini" "Field 2" "Flag" "DISABLED"

${endif}

FunctionEnd



Function LeavePathPage

!insertmacro MUI_INSTALLOPTIONS_READ $ProgramFolderPath "ProgramPath.ini" "Field 1" "State"

!insertmacro MUI_INSTALLOPTIONS_READ $DBFileFolderPath "ProgramPath.ini" "Field 2" "State"

FunctionEnd



Function EnterServerAdjustmentsPage

${if} $IsInstallDB == 0

Abort

${endif}

!insertmacro MUI_HEADER_TEXT "Доступ к серверу" "Укажите настройки доступа к серверу MS SQL, к которой будет подсоединена база данных"

!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "ServerAdjustments.ini"

!insertmacro MUI_INSTALLOPTIONS_SHOW

FunctionEnd



Function LeaveServerAdjustmentsPage

Call SaveServerAdjustments

FunctionEnd



Function SaveServerAdjustments

!insertmacro MUI_INSTALLOPTIONS_READ $ServerName "ServerAdjustments.ini" "Field 1" "Text"

!insertmacro MUI_INSTALLOPTIONS_READ $UserName "ServerAdjustments.ini" "Field 2" "Text"

!insertmacro MUI_INSTALLOPTIONS_READ $UserPathword "ServerAdjustments.ini" "Field 3" "Text"

!insertmacro MUI_INSTALLOPTIONS_READ $0 "ServerAdjustments.ini" "Field 4" "Text"

${if} $0 ""

StrCpy $ServerName "$ServerName\$0"

${endif}

FunctionEnd
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата TTTLordLeo:



Я нашел решение типа, где поля создаются напрямую в функции:

${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..."

Pop $Text

${NSD_OnChange} $Text fnTextChange
[архив].: NSIS - все вопросы :.




Этот код для nsDialogs -> MUI2.nsh


Цитата TTTLordLeo:



Для страниц инсталлятора я использую .ini файл с настройками элементов на странице.
[архив].: NSIS - все вопросы :.




Этот код для InstallOptions.dll -> MUI.nsh - почти не использую, так что пишите на MUI2, тогда подскажу... Изображение
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

wolkow70,

Под боком конвертера нету, делал руками.


читать дальше »




Код:

Код: Выделить всё

  WriteRegStr HKCR ".MP4" "" "LAV4.MP4"
  WriteRegStr HKCR ".MP4" "LA_Backup" "LAV4.MP4"
  WriteRegStr HKCR "LAV4.MP4" "" "Light Alloy - MPEG-4 Media File"
  WriteRegStr HKCR "LAV4.MP4\DefaultIcon" "" "$PROGRAMFILES\Light Alloy 4.5up\Icons\XPlite.icl,36"
  WriteRegStr HKCR "LAV4.MP4\Shell" "" "Play"
  WriteRegStr HKCR "LAV4.MP4\Shell\Enqueue" "" "Добавить в список в Light Alloy"
  WriteRegStr HKCR "LAV4.MP4\Shell\Enqueue\Command" "" "$PROGRAMFILES\Light Alloy 4.5up\LA.exe $\"%1$\" /ADD"
  WriteRegStr HKCR "LAV4.MP4\Shell\Open\Command" "" "$PROGRAMFILES\Light Alloy 4.5up\LA.exe $\"%1$\""
  WriteRegStr HKCR "LAV4.MP4\Shell\Play" "" "Воспроизвести в Light Alloy"
  WriteRegStr HKCR "LAV4.MP4\Shell\Play\Command" "" "$PROGRAMFILES\Light Alloy 4.5up\LA.exe $\"%1$\""
  WriteRegStr HKCR "LAV4.MP4\shellex\ContextMenuHandlers\LA5ContextMenu" "" "{45C15F61-ACAD-48C6-8D86-321ED8A6CFC6}"





Но я обычно такие данный загоняю в HKLM.


читать дальше »




Код:

Код: Выделить всё

  WriteRegStr HKLM "SOFTWARE\Classes\.MP4" "" "LAV4.MP4"
  WriteRegStr HKLM "SOFTWARE\Classes\.MP4" "LA_Backup" "LAV4.MP4"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4" "" "Light Alloy - MPEG-4 Media File"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\DefaultIcon" "" "$PROGRAMFILES\Light Alloy 4.5up\Icons\XPlite.icl,36"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\Shell" "" "Play"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\Shell\Enqueue" "" "Добавить в список в Light Alloy"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\Shell\Enqueue\Command" "" "$PROGRAMFILES\Light Alloy 4.5up\LA.exe $\"%1$\" /ADD"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\Shell\Open\Command" "" "$PROGRAMFILES\Light Alloy 4.5up\LA.exe $\"%1$\""
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\Shell\Play" "" "Воспроизвести в Light Alloy"
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\Shell\Play\Command" "" "$PROGRAMFILES\Light Alloy 4.5up\LA.exe $\"%1$\""
  WriteRegStr HKLM "SOFTWARE\Classes\LAV4.MP4\shellex\ContextMenuHandlers\LA5ContextMenu" "" "{45C15F61-ACAD-48C6-8D86-321ED8A6CFC6}"





Синтаксис записи строковых параметров.


читать дальше »




Код:

Код: Выделить всё

WriteRegStr [root_key] [subkey] [key_name] [value]

пример, записать в ключ значение Light Alloy[/i]



Код:

Код: Выделить всё

WriteRegStr HKLM "Software\My Company" "KEY" "Light Alloy"

Записать значение: "Light Alloy" /ADD[/i] - c вложенными кавычками, для этого есть символ $\"



Код:

Код: Выделить всё

WriteRegStr HKLM "Software\My Company" "KEY" "$\"Light Alloy$\" /ADD"

Можно так



Код:

Код: Выделить всё

WriteRegStr HKLM "Software\My Company" "KEY" '"Light Alloy" /ADD'

Или так



Код:

Код: Выделить всё

WriteRegStr HKLM "Software\My Company" "KEY" `"Light Alloy" /ADD`





%1 - в эту системную переменную подставляется путь\file[/i], т.е вы кликаете по файлу и он открывается соответствующей программой.

Еще очень важное замечание про расширяемый строковый параметр, параметр типа REG_EXPAND_STR


читать дальше »




Код:

Код: Выделить всё

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Common Desktop"=hex(2):25,00,41,00,4c,00,4c,00,55,00,53,00,45,00,52,00,53,00,\
  50,00,52,00,4f,00,46,00,49,00,4c,00,45,00,25,00,5c,00,20,04,30,04,31,04,3e,\
  04,47,04,38,04,39,04,20,00,41,04,42,04,3e,04,3b,04,00,00

Это проделки реестра, если импортируйте этот файл в реестр, то получите значение ключа Common Desktop[/i] равным %ALLUSERSPROFILE%\Рабочий стол

Так вот, если вы их конвертируете в скрипт NSIS, то получите значение ключа в бинарном ввиде, а в реестре смотрим - это же расширяемый строковый параметр, здесь очень важно смотреть, какой тип параметра!

Правильно будет так:



Код:

Код: Выделить всё

WriteRegExpandStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" "Common Desktop" "%ALLUSERSPROFILE%\Рабочий стол"
Аватара пользователя
wolkow70

Re: [архив].: NSIS - все вопросы :.

Сообщение wolkow70 »

Цитата TTTLordLeo:



в MUI2 определение элементов и их положение возможно только способом указания кода их создания в функция скрипта?
[архив].: NSIS - все вопросы :.




конечно! никаких ini - чистый апи, работает все прекрасно - дело в тренировке и изучением толмутов.

Тем более посмотрите предыдущие странички темы этак 20 - 30 страниц - я много приводил примеров создания страничек на MUI2


Цитата TTTLordLeo:



есть способ накидать элементы в визуальном дизайнере?
[архив].: NSIS - все вопросы :.




есть, но для юникодной версии NSIS (ссылка в шапке), но правда далеко от идеала. После 5 минут общения с дизайнером пропала охота пользоваться... Изображение
http://coolsoft.altervista.org/en/nsisdialogdesigner
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Парень из Словакии (под ником Slappy) создал плагин для "HM NIS Edit", позволяющий создавать дизайн окон инсталлятора NSIS как в InnoSetup. Назвал он свое творение "
Graphical Installer
" и распространяет за деньги. Ориентирование плагина - создание красочных инсталляторов для игрушек. Кто-нибудь уже испытывал это чудо?

Он пишет, что этого результата можно добиться и без его дополнения. Я хотел спросить здесь у опытных NSIS-ишников (я только начал знакомиться с этим установщиком) - это действительно возможно? Просто дайте мне направление, на что обратить внимание (какие плагины или модули использовать), а я уже буду дальше сам разбираться. Как говорится, зачем платить.



Может у кого здесь уже есть наработки в этом направлении, будет приятно с ними познакомиться и разобрать ко косточкам.
Ответить

Вернуться в «Автоматическая установка приложений»