|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Старожил Сообщения: 291
|
Профиль | Отправить PM | Цитировать Цитата skinny21:
Может вам нужен лаунчер к портативке собранной в один файл в турбо или тинапе или к портативке от автора программы? |
|
------- Последний раз редактировалось ZVSRus, 28-01-2018 в 22:08. Отправлено: 22:02, 28-01-2018 | #2171 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Цитата ZVSRus:
|
|
Отправлено: 22:13, 28-01-2018 | #2172 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата skinny21:
Вам останется только прикрутить её к вашему сценарию. Вот простейший пример её использовании (на базе UltraISOPortable по вашей ссылке) Скрытый текст
Name "UltraISOPortable" OutFile "UltraISOPortableTest.exe" InstallDir $EXEDIR\Temp RequestExecutionLevel user SilentInstall silent Page instfiles Section "" SetOutPath $EXEDIR\App\UltraISO StrCmp $CMDLINE "" 0 param StrCpy $0 "" Goto runexe param: Call GetParameters Pop $0 runexe: Exec '"$EXEDIR\App\UltraISO\UltraISO.exe" $0' SectionEnd Function GetParameters Push $R0 Push $R1 Push $R2 Push $R3 StrCpy $R2 1 StrLen $R3 $CMDLINE StrCpy $R0 $CMDLINE $R2 StrCmp $R0 '"' 0 +3 StrCpy $R1 '"' Goto loop StrCpy $R1 " " loop: IntOp $R2 $R2 + 1 StrCpy $R0 $CMDLINE 1 $R2 StrCmp $R0 $R1 get StrCmp $R2 $R3 get Goto loop get: IntOp $R2 $R2 + 1 StrCpy $R0 $CMDLINE 1 $R2 StrCmp $R0 " " get StrCpy $R0 $CMDLINE "" $R2 Pop $R3 Pop $R2 Pop $R1 Exch $R0 FunctionEnd Что делает этот лаунчер? При запуске проверяет наличие аргументов командной строки (в данном случае путь к файлу образа). Если они есть, что считывает их в переменную $0 и передает её в команду запуска программы. Если их нет, то переменной $0 присваивается пустое значение и запуск программы выполняется без параметров. Чтобы проверить его работу, поместите файл лаунчера UltraISOPortableTest.exe рядом (в одной папке) с оригинальным файлом загрузчика UltraISOPortable.exe. Затем можно просто запустить его или перетянуть на него файл образа. Все. |
|
Отправлено: 02:17, 29-01-2018 | #2173 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Flix,
Огромная благодарность, неделю искал выход из этой ситуации. |
Последний раз редактировалось skinny21, 29-01-2018 в 19:03. Отправлено: 09:43, 29-01-2018 | #2174 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Мужики, добрый день. Помогите с кодом. Возникла проблема при создании информационной страницы. Идея такова: в зависимости от выбранного языка на странице (в Control EDIT) должен показаться текст из текстового файла соответствующего языка. То есть если выбран русский язык инсталлятора, то текст отображается из файла info_ru.txt, если английский язык, то текст отображается из файла info_en.txt. Возник ряд проблем, при чтении из текстового файла (FileOpen-FileRead) текст отображается с крякозябликами и считывается только первая строка.
Что есть сейчас
!define PRODUCT_NAME "MyProg"
Var InfoPage Var InfoBeforePage_Control_EDIT !include "MUI2.nsh" !include "nsDialogs.nsh" !include "LogicLib.nsh" Page custom InfoBeforePage !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Russian" Name "${PRODUCT_NAME}" OutFile "InfoBeforePage.exe" Function .onInit !insertmacro MUI_LANGDLL_DISPLAY InitPluginsDir ;${If} ${LANG_RUSSIAN} File "/oname=$PLUGINSDIR\info.txt" "info_ru.txt" ; ${Else} ; File "/oname=$PLUGINSDIR\info.txt" "info_en.txt" ;${EndIf} FileOpen $4 "$PLUGINSDIR\info.txt" r FileRead $4 $1 ; Read a line FileClose $4 FunctionEnd Function InfoBeforePage nsDialogs::Create 1018 Pop $InfoPage ${If} $InfoPage == error Abort ${EndIf} !insertmacro MUI_HEADER_TEXT "Dialog title..." "Dialog subtitle..." !define MYMULTILINEEDIT_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${ES_AUTOHSCROLL}|${ES_MULTILINE}|${ES_READONLY} nsDialogs::CreateControl EDIT ${MYMULTILINEEDIT_STYLE} ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE} 0u 0u 300u 140u "$1" Pop $InfoBeforePage_Control_EDIT nsDialogs::Show FunctionEnd Section "MainSection" SEC01 SectionEnd |
Отправлено: 15:07, 29-01-2018 | #2175 |
Пользователь Сообщения: 94
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
Теперь по вашему сценарию. С учетом того, что команда считывает только строку, то необходимо организовать цикл с поочередным чтением всех строк до конца файла. После чтения каждой строки, её необходимо передавать элементу управления. Таким образом, в простейшем варианте эту задачу можно выполнить так (на базе вашего сценария): Вариант решения
!define PRODUCT_NAME "MyProg" Var InfoPage Var InfoBeforePage_Control_EDIT !include "MUI2.nsh" !include "nsDialogs.nsh" !include "LogicLib.nsh" ;-------------------------------- ;General Name "${PRODUCT_NAME}" OutFile "InfoBeforePage.exe" ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING ;Show all languages, despite user's codepage !define MUI_LANGDLL_ALLLANGUAGES ;-------------------------------- ;Pages Page custom InfoBeforePage !insertmacro MUI_PAGE_INSTFILES ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Russian" ;-------------------------------- ;Installer Sections Section "MainSection" SEC01 SectionEnd ;-------------------------------- ;Installer Functions Function .onInit !insertmacro MUI_LANGDLL_DISPLAY InitPluginsDir SetOutPath $PLUGINSDIR ${If} $LANGUAGE = ${LANG_RUSSIAN} ; Документ должен быть в кодировке ANSI !!! File /oname=$PLUGINSDIR\info.txt info_ru.txt ${Else} ; Документ должен быть в кодировке ANSI !!! File /oname=$PLUGINSDIR\info.txt" info_en.txt ${EndIf} FunctionEnd Function InfoBeforePage nsDialogs::Create 1018 Pop $InfoPage ${If} $InfoPage == error Abort ${EndIf} !insertmacro MUI_HEADER_TEXT "Dialog title..." "Dialog subtitle..." ; === RichText1 (type: RichText) === !define MYMULTILINEEDIT_STYLE ${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} nsDialogs::CreateControl "RichEdit20A" ${MYMULTILINEEDIT_STYLE} ${WS_EX_STATICEDGE} 0u 0u 300u 140u "" Pop $InfoBeforePage_Control_EDIT ; === Чтение файла === Call ReadTxtFile nsDialogs::Show FunctionEnd ; Функция чтения и вывода содержимого файла в элемент "RichEdit20A" Function ReadTxtFile ; Открываем файл для чтения FileOpen $4 "$PLUGINSDIR\info.txt" r loop: ; Считываем строку в переменную $1 FileRead $4 $1 ; Передаем строку в элемент "RichEdit20A" ; Флаг ${EM_REPLACESEL} указывает на вставку текста с новой строки SendMessage $InfoBeforePage_Control_EDIT ${EM_REPLACESEL} 0 "STR:$1" ; Если нет ошибок, переходим к следующей строке IfErrors +1 loop ; Если ошибка или конец файла, закрываем файл. FileClose $4 FunctionEnd Если необходимо чтение документов в кодировке Unicode, то посмотрите в сторону команды FileReadUTF16LE. |
|
Отправлено: 18:06, 29-01-2018 | #2176 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Flix, респект тебе и уважуха. Выручил...
|
Отправлено: 18:38, 29-01-2018 | #2177 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
Для этого есть несколько плагинов, к примеру, самый известный - WebCtrl. Комплект примера во вложении. Выглядеть будет так : окно для просмотра можно делать ессно любым способом (наверное лучше через nsDialogs::CreateControl)... |
|
Последний раз редактировалось MKN, 27-05-2020 в 16:17. Отправлено: 11:43, 30-01-2018 | #2178 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать MKN , спасибо! Действительно кода в половину меньше...
|
Отправлено: 11:51, 30-01-2018 | #2179 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать К слову, об ограничении FileRead на 1024 символа...
Для ANSI это ограничение можно снять с помощью сообщения EM_LIMITTEXT К примеру, для вот этого текста ( https://yadi.sk/d/1cLhpTrv3Rukjv ) без EM_LIMITTEXT отображаются только 512 строк, а с EM_LIMITTEXT - все 13229 строк. Еснно такой большой объём долго обрабатывается... Пример : OutFile EM_LIMITTEXT-test.exe !include MUI2.nsh Page custom MyPage !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" Function MyPage nsDialogs::Create 1044 Pop $0 nsDialogs::CreateControl ${__NSD_Text_CLASS} ${__NSD_Text_STYLE}|${ES_MULTILINE}|${WS_VSCROLL}|${ES_READONLY} ${__NSD_Text_EXSTYLE} 10u 10u 310u 170u "" Pop $0 FileOpen $4 "$EXEDIR\test.txt" r loop: FileRead $4 $1 SendMessage $0 ${EM_REPLACESEL} 0 "STR:$1" SendMessage $0 ${EM_LIMITTEXT} 0 "STR:$1" IfErrors +1 loop FileClose $4 nsDialogs::Show FunctionEnd Section SectionEnd |
Отправлено: 13:01, 30-01-2018 | #2180 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|