|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
|
------- Отправлено: 12:02, 09-12-2012 |
|
Старожил Сообщения: 292
|
Профиль | Отправить PM | Цитировать Цитата skinny21:
Может вам нужен лаунчер к портативке собранной в один файл в турбо или тинапе или к портативке от автора программы? |
|
|
------- Последний раз редактировалось ZVSRus, 28-01-2018 в 22:08. Отправлено: 22:02, 28-01-2018 | #2171 |
|
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Цитата ZVSRus:
![]() |
|
|
Отправлено: 22:13, 28-01-2018 | #2172 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 69
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить 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 |
|
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Flix, респект тебе и уважуха. Выручил...
|
|
Отправлено: 18:38, 29-01-2018 | #2177 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
Для этого есть несколько плагинов, к примеру, самый известный - WebCtrl. Комплект примера во вложении. Выглядеть будет так : ![]() окно для просмотра можно делать ессно любым способом (наверное лучше через nsDialogs::CreateControl)... |
|
|
Последний раз редактировалось MKN, 27-05-2020 в 16:17. Отправлено: 11:43, 30-01-2018 | #2178 |
|
Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать MKN , спасибо! Действительно кода в половину меньше...
|
|
Отправлено: 11:51, 30-01-2018 | #2179 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 | |
|