|
Компьютерный форум 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 |
![]() Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать MKN, спасибо! Забираю в копилку, пригодится и не раз...
|
Отправлено: 13:10, 30-01-2018 | #2181 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Пользователь Сообщения: 93
|
Профиль | Отправить PM | Цитировать Встречайте NSIS v3.03 (релиз от 29 января 2018): страница загрузки
Что нового...
F.1.1 Release Notes
Building NSIS with Python 2.6 or older is no longer supported F.1.2 Changelog F.1.2.1 Major Changes Added more NSD controls and macros (RFE #543) Added !gettlbversion Library TLB and VxD version support on POSIX (patch #284) F.1.2.2 Minor Changes Added System plug-in v2 syntax option Added System plug-in B and H types Added IntPtrCmp, IntPtrCmpU, and IntPtrOp Added Int64Cmp, Int64CmpU and Int64Fmt (64-bit only) Added IntOp and System::Int64Op >>> operator Added more !define /math operators Added WinVer.nsh IsDomainController (patch #286) Plug-ins now set the ASLR, DEP, LAA, NOSEH and TS PE flags (bug #1188) MakeNSIS exits with code 0 for various information commands (bug #1193) Removed unused NSD_LB_Clear macro parameter F.1.2.3 Translations Added Tatar (patch #281) Fixed and updated Scottish Gaelic (patch #285, bug #1197) Updated Italian (bug #1194) F.1.2.4 Build System Added support for Python 3 Dropped support for Python 2.6 and older |
Отправлено: 16:00, 30-01-2018 | #2182 |
![]() Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Добрый вечер всем. Есть вопрос по поводу переноса строки в Control_EDIT. Возникла идея создать страницу готовности к установке по аналогу inno (PreparingPage). За основу взял вариант который решался(и решился(спасибо Flix и MKN)) на этой страничке форума. Суть затеи такова: на сновании выбранных задач инсталляции должен выводиться список, в котором подробно указаны выбранные задачи(язык, ярлыки, путь установки...). Хм... Думал делов-то, при наличии уже имеющихся знаний и тем более готовых решений. Но не тут то было... Пробовал и так $\n и так \n и loop-ил сверху вниз и не вышло.
Что есть...
!define PRODUCT_NAME "My Program"
!define PRODUCT_VERSION "1.0" !include "MUI2.nsh" !include "Sections.nsh" !include "nsDialogs.nsh" !include "LogicLib.nsh" !include "FileFunc.nsh" Page custom PageInit1 PageDestroy1 !insertmacro MUI_PAGE_DIRECTORY Page custom PreparingPage ;Languages !define MUI_LANGDLL_ALLLANGUAGES !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_RESERVEFILE_LANGDLL Function .OnInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd LangString PRPAGE_TEXT ${LANG_RUSSIAN} "Всё готово к установке" LangString PRPAGE_TEXT ${LANG_ENGLISH} "Ready to Install" LangString PRPAGE_SUBTEXT ${LANG_RUSSIAN} "Программа установки готова начать установку ${PRODUCT_NAME} на ваш компьютер." LangString PRPAGE_SUBTEXT ${LANG_ENGLISH} "Setup is now ready to begin installing ${PRODUCT_NAME} on your computer." LangString CUSTPAGE_1_TITLE ${LANG_RUSSIAN} "Выбор языка интерфейса и дополнительных задач" LangString CUSTPAGE_1_TITLE ${LANG_ENGLISH} "Selecting language and additional tasks" LangString CUSTPAGE_1_SUBTITLE ${LANG_RUSSIAN} "Выберите язык интерфейса и дополнительные задачи установки." LangString CUSTPAGE_1_SUBTITLE ${LANG_ENGLISH} "Select the interface language and additional installation tasks." LangString CUSTPAGE_1GRBOX1_CAPT ${LANG_RUSSIAN} "Язык интерфейса:" LangString CUSTPAGE_1GRBOX1_CAPT ${LANG_ENGLISH} "Interface language:" LangString CUSTPAGE_1RADBUT1_CAPT ${LANG_RUSSIAN} "Русский язык" LangString CUSTPAGE_1RADBUT1_CAPT ${LANG_ENGLISH} "Russian language" LangString CUSTPAGE_1RADBUT2_CAPT ${LANG_RUSSIAN} "Английский язык" LangString CUSTPAGE_1RADBUT2_CAPT ${LANG_ENGLISH} "English language" LangString CUSTPAGE_1GRBOX2_CAPT ${LANG_RUSSIAN} "Дополнительные задачи:" LangString CUSTPAGE_1GRBOX2_CAPT ${LANG_ENGLISH} "Additional tasks:" LangString CUSTPAGE_1CHBOX1_CAPT ${LANG_RUSSIAN} "Ярлык на Рабочем столе" LangString CUSTPAGE_1CHBOX1_CAPT ${LANG_ENGLISH} "Desktop Shortcut" LangString CUSTPAGE_1CHBOX2_CAPT ${LANG_RUSSIAN} "Ярлык(и) в меню Пуск" LangString CUSTPAGE_1CHBOX2_CAPT ${LANG_ENGLISH} "Shortcut(s) in the Start menu" LangString VIBRANO ${LANG_RUSSIAN} "Выбрано:" LangString VIBRANO ${LANG_ENGLISH} "Selected:" # Variables var CustPage1 Var GroupBox1 var Check1 var Check2 Var CheckBox1 Var CheckBox2 Var GroupBox2 var Radio1 var Radio2 Var RadioButton1 Var RadioButton2 var Preparing Var Preparing_Control_EDIT Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "Main_setup.exe" InstallDir "$PROGRAMFILES\My Program" Function PageInit1 nsDialogs::Create 1018 Pop $CustPage1 ${If} $CustPage1 == error Abort ${EndIf} ${If} $LANGUAGE = ${LANG_RUSSIAN} !insertmacro MUI_HEADER_TEXT $(CUSTPAGE_1_TITLE) $(CUSTPAGE_1_SUBTITLE) ${Else} !insertmacro MUI_HEADER_TEXT $(CUSTPAGE_1_TITLE) $(CUSTPAGE_1_SUBTITLE) ${EndIf} ; === GroupBox1 (type: GroupBox) === ${NSD_CreateGroupBox} 1.9u 2.38u 131.65u 43u "$(CUSTPAGE_1GRBOX1_CAPT)" Pop $GroupBox1 ; === RadioButton1 (type: RadioButton) === ${NSD_CreateRadioButton} 7.9u 13.54u 121.11u 12.31u "$(CUSTPAGE_1RADBUT1_CAPT)" Pop $RadioButton1 ${NSD_SetState} $RadioButton1 1 ; === RadioButton2 (type: RadioButton) === ${NSD_CreateRadioButton} 7.9u 27.54u 121.11u 12.31u "$(CUSTPAGE_1RADBUT2_CAPT)" Pop $RadioButton2 ; === GroupBox2 (type: GroupBox) === ${NSD_CreateGroupBox} 1.32u 53.38u 131.65u 80.54u "$(CUSTPAGE_1GRBOX2_CAPT)" Pop $GroupBox2 ; === CheckBox1 (type: Checkbox) === ${NSD_CreateCheckbox} 7.9u 66.08u 121.11u 12.31u "$(CUSTPAGE_1CHBOX1_CAPT)" Pop $CheckBox1 ${NSD_SetState} $CheckBox1 1 ; === CheckBox2 (type: Checkbox) === ${NSD_CreateCheckbox} 7.9u 82.46u 121.11u 12.31u "$(CUSTPAGE_1CHBOX2_CAPT)" Pop $CheckBox2 ${NSD_SetState} $CheckBox2 1 nsDialogs::Show FunctionEnd Function PageDestroy1 ${NSD_GetState} $RadioButton1 $Radio1 ${NSD_GetState} $RadioButton2 $Radio2 ${NSD_GetState} $CheckBox1 $Check1 ${NSD_GetState} $CheckBox2 $Check2 FunctionEnd Function PreparingPage nsDialogs::Create 1018 Pop $Preparing ${If} $Preparing == error Abort ${EndIf} ; !insertmacro MUI_HEADER_TEXT "" "" ${If} $LANGUAGE = ${LANG_RUSSIAN} !insertmacro MUI_HEADER_TEXT $(PRPAGE_TEXT) $(PRPAGE_SUBTEXT) ${Else} !insertmacro MUI_HEADER_TEXT $(PRPAGE_TEXT) $(PRPAGE_SUBTEXT) ${EndIf} !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 "" Pop $Preparing_Control_EDIT Call ShowSelectedItems nsDialogs::Show FunctionEnd Function ShowSelectedItems SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(VIBRANO)" ;"STR:$(VIBRANO)$\n" - такой вариант не работает ${If} $Radio1 == 1 ; loop: SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(CUSTPAGE_1RADBUT1_CAPT)" ;IfErrors +1 loop ${If} $CheckBox1 == 1 SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(CUSTPAGE_1CHBOX1_CAPT)" ${EndIf} ${EndIf} FunctionEnd Section "" SectionEnd Что примерно хотел сделать ![]() |
Отправлено: 20:33, 31-01-2018 | #2183 |
![]() Пользователь Сообщения: 93
|
Профиль | Отправить PM | Цитировать Alex S, предлагаю вам такой вариант решения. В вашем примере сценария замените функцию "ShowSelectedItems" следующим кодом:
Новая функция ShowSelectedItems
Function ShowSelectedItems StrCpy $7 $(VIBRANO) ${If} $Radio1 == ${BST_CHECKED} StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX1_CAPT) $(CUSTPAGE_1RADBUT1_CAPT)' ${EndIf} ${If} $Radio2 == ${BST_CHECKED} StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX1_CAPT) $(CUSTPAGE_1RADBUT2_CAPT)' ${EndIf} ${If} $Check1 == ${BST_CHECKED} ${OrIf} $Check2 == ${BST_CHECKED} StrCpy $7 '$7$\r$\n$\r$\n$\t$(CUSTPAGE_1GRBOX2_CAPT)' ${EndIf} ${If} $Check1 == ${BST_CHECKED} StrCpy $7 '$7$\r$\n$\r$\n$\t$\t$(CUSTPAGE_1CHBOX1_CAPT)' ${EndIf} ${If} $Check2 == ${BST_CHECKED} StrCpy $7 '$7$\r$\n$\r$\n$\t$\t$(CUSTPAGE_1CHBOX2_CAPT)' ${EndIf} StrCpy $7 '$7$\r$\n$\r$\n$\r$\n$\t$(^DirSubText) "$(^NameDA)":' StrCpy $7 '$7$\r$\n$\r$\n$\t$INSTDIR' SendMessage $Preparing_Control_EDIT ${WM_SETTEXT} 0 "STR:$7" FunctionEnd Смысл вот в чем. Под текст, который необходимо вывести на странице, мы выделяем переменную (в примере $7). В ней мы формируем массив строк, в зависимости от выбранных пользователем параметров установки. После чего, последней командой, мы передаем эту строку необходимому элементу управления. Переносы и отступы формируются предусмотренными в NSIS константами: перевод строки — $\r$\n; табуляция — $\t. Под строку желательно выделить отдельную переменную, а не предустановленную. Результат
![]() |
Отправлено: 00:56, 01-02-2018 | #2184 |
![]() Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Flix, спасибо большое за помощь. Очень интересный вариант... Я если честно мыслил в другую сторону. Сел, почитал справочку NSIS и осенило... Начал пробовать вариант с созданием временного файла, в который по ходу записываются данные настроек установки и в последний момент с него производится считывание и вывод информации... Собственно, как вариант, идея сработала. Твой вариант интереснее, я че-то немного недопетрил идти в этом направлении. Ещё раз спасибо за помощь.
Вот что вышло у меня...
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY Var /Global PrepFile ;FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" w ;FileClose $PrepFile # Закрываем файл FunctionEnd Function ShowSelectedItems FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" w ; SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$(VIBRANO)" ${If} $Radio1 == 1 FileWrite $PrepFile "$\r$\n$\r$\n $(CUSTPAGE_1RADBUT1_CAPT)$\r$\n" # Записываем нужную информацию ${Else} FileWrite $PrepFile "$\r$\n$\r$\n $(CUSTPAGE_1RADBUT2_CAPT)$\r$\n" # Записываем нужную информацию ${EndIf} ${If} $Check1 == 1 FileWrite $PrepFile "$(CUSTPAGE_1CHBOX1_CAPT)$\r$\n" ${EndIf} ${If} $Check2 == 1 FileWrite $PrepFile "$(CUSTPAGE_1CHBOX2_CAPT)$\r$\n" ${EndIf} FileClose $PrepFile # Закрываем файл FileOpen $PrepFile "$PLUGINSDIR\MyPreparingFile.txt" r loop: FileRead $PrepFile $2 SendMessage $Preparing_Control_EDIT ${EM_REPLACESEL} 0 "STR:$2" IfErrors +1 loop FileClose $PrepFile # Закрываем файл FunctionEnd |
Отправлено: 02:36, 01-02-2018 | #2185 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Как проверить контрольную сумму "CRC" файла? Если не совпадает, то сообщение "куку" и выход, если совпадает, то идём дальше...
|
Отправлено: 11:13, 04-02-2018 | #2186 |
![]() Пользователь Сообщения: 93
|
Профиль | Отправить PM | Цитировать Цитата AlekseyPopovv:
Пример
Function CheckCRC # Проверяем наличие требуемого файла IfFileExists $INSTDIR\file.exe 0 noFile # Если файл существует, то проверяем его CRC # Для проверки используется плагин CRCCheck (http://nsis.sourceforge.net/CRCCheck_plug-in) CRCCheck::GenCRC $INSTDIR\file.exe # Записываем значение CRC-файла из стека в переменную $1 Pop $1 # Выводим сообщение в отчете установки со значением CRC-файла DetailPrint "~ Файл file.exe CRC = $1" # Необходимая контрольная сумма файла (НЕХ) CRC = 6528E1D3 # Сравниваем значения полученной CRC с заданным (в десятичном формате) ${IfNot} $1 == 1697178067 # Если значения не совпадают... # Метка перехода в случае отсутствия указанного файла noFile: # Выводим сообщение в отчете установки о неверном значении CRC DetailPrint "~ Файл file.exe не найден или его CRC отличается от исходной" # Показываем пользователю диалог с сообщением MessageBox MB_ICONINFORMATION|MB_OK "Продолжить работу инсталлятора невозможно.$\r$\n\ Файл file.exe не существует или его CRC не$\r$\n\ не совпадает с оригинальным значением." # Завершаем работу программы установки Quit ${EndIf} # Выводим сообщение в отчете установки об успешном выполнении операции DetailPrint "~ CRC файла file.exe - OK" FunctionEnd |
|
Отправлено: 11:57, 04-02-2018 | #2187 |
Старожил Сообщения: 169
|
Профиль | Отправить PM | Цитировать Flix, разобрался.
|
Последний раз редактировалось AlekseyPopovv, 04-02-2018 в 15:28. Отправлено: 13:07, 04-02-2018 | #2188 |
![]() Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Мужики, добрый день. Снова возник вопрос с диалогом выбора папки назаначения. Возможно ли в зависимости от языка инсталлятора(русский-английский) сменить текст кнопок "отмена" и "создать папку" на текст соответствующего языка?
Если можно, на базе этого скрипта...
!define PRODUCT_NAME "MyProg" !define PRODUCT_VERSION "1.0" !include "MUI2.nsh" !include "nsDialogs.nsh" Var BrowsePage Var BrowsePage_DirRequest1_Txt Var BrowsePage_DirRequest1_Btn Var BrowsePage_DirRequest2_Txt Var BrowsePage_DirRequest2_Btn Page custom BrowsePage1 !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_LANGUAGE "English" LangString BrowseButtonCaption ${LANG_RUSSIAN} "Обзор..." LangString BrowseButtonCaption ${LANG_ENGLISH} "Browse..." LangString CUSTPAGE_TITLE ${LANG_RUSSIAN} "Текст на русском" LangString CUSTPAGE_TITLE ${LANG_ENGLISH} "Tekst na angliyskom" LangString CUSTPAGE_SUBTITLE ${LANG_RUSSIAN} "СубТекст на русском" LangString CUSTPAGE_SUBTITLE ${LANG_ENGLISH} "SubTekst na angliyskom" LangString BrowseDialogLabel ${LANG_RUSSIAN} "Текст на русском" LangString BrowseDialogLabel ${LANG_ENGLISH} "Tekst na angliyskom" Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "setup.exe" Function .OnInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd Function BrowsePage1 nsDialogs::Create 1018 Pop $BrowsePage ${If} $BrowsePage == error Abort ${EndIf} ${If} $LANGUAGE = ${LANG_RUSSIAN} !insertmacro MUI_HEADER_TEXT $(CUSTPAGE_TITLE) $(CUSTPAGE_SUBTITLE) ${Else} !insertmacro MUI_HEADER_TEXT $(CUSTPAGE_TITLE) $(CUSTPAGE_SUBTITLE) ${EndIf} ; === DirRequest1_Txt (type: Text) === ${NSD_CreateText} 7.9u 17.23u 226.43u 12.31u "$SMPROGRAMS\${PRODUCT_NAME}" Pop $BrowsePage_DirRequest1_Txt ; === DirRequest1_Btn (type: Button) === ${NSD_CreateButton} 235.65u 17.23u 52.66u 12.31u "$(BrowseButtonCaption)" Pop $BrowsePage_DirRequest1_Btn ${NSD_OnClick} $BrowsePage_DirRequest1_Btn BrowsePage_DirRequest1_Click ; === DirRequest2_Txt (type: Text) === ${NSD_CreateText} 7.9u 46.77u 226.43u 12.31u "$SMPROGRAMS\${PRODUCT_NAME}" Pop $BrowsePage_DirRequest2_Txt ; === DirRequest2_Btn (type: Button) === ${NSD_CreateButton} 235.65u 46.77u 52.66u 12.31u "$(BrowseButtonCaption)" Pop $BrowsePage_DirRequest2_Btn ${NSD_OnClick} $BrowsePage_DirRequest2_Btn BrowsePage_DirRequest2_Click nsDialogs::Show FunctionEnd Function BrowsePage_DirRequest1_Click Pop $R0 ${If} $R0 == $BrowsePage_DirRequest1_Btn ${NSD_GetText} $BrowsePage_DirRequest1_Txt $R0 nsDialogs::SelectFolderDialog /NOUNLOAD "" "$R0" Pop $R0 ${If} "$R0" != "error" ${NSD_SetText} $BrowsePage_DirRequest1_Txt "$R0" ${EndIf} ${EndIf} FunctionEnd Function BrowsePage_DirRequest2_Click System::Call 'SHELL32::SHGetSpecialFolderLocation(i0,i0x2,*i.r2)i.r0' System::Call '*(i$hwndparent,i$2,i,t "$(BrowseDialogLabel)",i0x470,kr3,i0,i0)i.r1' System::Call 'SHELL32::SHBrowseForFolder(ir1)i.r0' System::Call 'OLE32::CoTaskMemFree(ir2)' System::Free $1 ${If} $0 <> 0 System::Call 'SHELL32::SHGetPathFromIDList(i$0,t "" R9)' ${NSD_SetText} $BrowsePage_DirRequest2_Txt= $R9 ${EndIf} System::Call 'OLE32::CoTaskMemFree(ir0)' FunctionEnd Section "" SectionEnd |
Отправлено: 16:41, 05-02-2018 | #2189 |
![]() Пользователь Сообщения: 93
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
![]() |
|
Отправлено: 23:11, 05-02-2018 | #2190 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|