Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets,
Макет такой :
Section -Post
Exec "App1.exe"
Exec "App2.exe"
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\App3" "Path"
Exec "$R0\App3.exe"
SectionEnd
App1 должно запускаться первым, затем App2, после получения пути - App3.
Все эти проги должны работать одновременно. App3 создаёт файл либо "сама" либо после запуска извне App4.
Как только появится этот файл, App1 и App2 становятся не нужны, но App3 должно оставаться открытым.
kotkovets
27-11-2010, 14:43
Как все запутано!
Здесь организован бесконечный цикл, до тех пор, пока не появится файлик Txt.txt
Для четвертого запуска app.exe или продолжения скрипта нужно время "жизни" цикла
!include "LogicLib.nsh"
---
Section -Post
Exec "App1.exe"
Exec "App2.exe"
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\App3" "Path"
Exec "$R0\App3.exe"
${Do}
StrCpy $0 0
IfFileExists "$Temp\Txt.txt" 0 +2
StrCpy $0 1
${If} $0 == 1
Quit
${EndIf}
${LoopUntil} $0 == 1
SectionEnd
kotkovets
28-11-2010, 14:43
Последнее время мне часто задают вопросы: как поместить свой текст описания, в зависимости от выбранного языка установщика?
Для этих целей служит команда LangString
LangString message ${LANG_ENGLISH} "English message"
LangString message ${LANG_FRENCH} "French message"
LangString message ${LANG_KOREAN} "Korean message"
MessageBox MB_OK "A translated message: $(message)"
В отличии от определения констант (defines) использующие изогнутые скобы - {}, здесь используются круглые скобки - ().
Всегда устанавливайте текст описания строки для каждого языка в вашем скрипте.
Пример многоязычного инсталлятора посмотрите C:\Program Files\NSIS\Examples\Modern UI\MultiLanguage.nsi
!include "MUI2.nsh"
Caption "MultiLanguage Modern UI Test"
Name "MultiLanguage Test"
OutFile "Test MultiLanguage.exe"
;--------------------------------
!define MUI_WELCOMEPAGE_TITLE "$(WELCOMEPAGE_TITLE)"
!define MUI_WELCOMEPAGE_TEXT "$(WELCOMEPAGE_TEXT)"
;--------------------------------
!define MUI_FINISHPAGE_TITLE "$(FINISHPAGE_TITLE)"
!define MUI_FINISHPAGE_TEXT "$(FINISHPAGE_TEXT)"
;--------------------------------
!define MUI_COMPONENTSPAGE_SMALLDESC
;--------------------------------
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
;--------------------------------
!insertmacro MUI_LANGUAGE "Russian" ;first language is the default language
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_RESERVEFILE_LANGDLL
;--------------------------------
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
;--------------------------------
Section "$(NAME_SECTION)" SecDummy
MessageBox MB_ICONINFORMATION|MB_OK "$(Text_MessageBox)"
SectionEnd
;--------------------------------------------------------------------
;Текст описания странички приветствия
LangString WELCOMEPAGE_TITLE ${LANG_RUSSIAN} "ДОБРО ПОЖАЛОВАТЬ!"
LangString WELCOMEPAGE_TITLE ${LANG_ENGLISH} "WELCOME!"
LangString WELCOMEPAGE_TEXT ${LANG_RUSSIAN} "Это пример показывает как поместить свой текст описания в \
зависимости от выбранного языка инсталлятора!$\r$\n$\r$\n$_CLICK"
LangString WELCOMEPAGE_TEXT ${LANG_ENGLISH} "This example shows how to put your text descriptions, \
depending on the selected language installer!$\r$\n$\r$\n$_CLICK"
;--------------------------------------------------------------------
;Текст описания странички завершения
LangString FINISHPAGE_TITLE ${LANG_RUSSIAN} "ЭТО СТРАНИЦА ЗАВЕРШЕНИЯ!"
LangString FINISHPAGE_TITLE ${LANG_ENGLISH} "COMPLETION OF THIS PAGE!"
LangString FINISHPAGE_TEXT ${LANG_RUSSIAN} "Теперь вы знаете как поместить свой текст описания в \
зависимости от выбранного языка установщика!$\r$\n$\r$\nНажмите кнопку $\"Готово$\" \
для выхода из программы установки."
LangString FINISHPAGE_TEXT ${LANG_ENGLISH} "Now you know how to put your descriptive text depending on \
the language of the installer!$\r$\n$\r$\nClick Finish to close this wizard."
;--------------------------------------------------------------------
;Текст сообщения
LangString TEXT_MESSAGEBOX ${LANG_RUSSIAN} "Выбран Русский язык установщика!$\r$\n ID языка: $LANGUAGE"
LangString TEXT_MESSAGEBOX ${LANG_ENGLISH} "The English language installer!$\r$\n ID language: $LANGUAGE"
;--------------------------------------------------------------------
;Текст названия(имя) секции
LangString SECTION ${LANG_RUSSIAN} "Русское описание секции"
LangString SECTION ${LANG_ENGLISH} "The English description of section"
;Текст описания секции
LangString NAME_SECTION ${LANG_RUSSIAN} "Это русское название секции"
LangString NAME_SECTION ${LANG_ENGLISH} "This is the english name of the section"
;Макрос, который показавает текст описания секции
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(SECTION)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
kotkovets, Наверное стоит указать что данный пример кода будет корректно работать в Нсис (кодировка Анси) только в случае использования связки английский/русский, не более.
Для всех остальных случаев потребуется использовать версию Нсис - Юникод... ;)
MfG MaGoth, WoG.ru-Community.
kotkovets
29-11-2010, 11:30
Наверное стоит указать что данный пример кода будет корректно работать в Нсис (кодировка Анси) только в случае использования связки английский/русский, не более »
Это с чего так? добавь C:\Program Files\NSIS\Examples\Modern UI\MultiLanguage.nsi константу:
!define MUI_LANGDLL_ALLLANGUAGES
И будут тебе все языки, доступны в ANSI-NSIS, большинство пользователей используют ANSI сборку NSIS.
A Юникод в частности, в этом случае, добавляет поддержку "экзотических" языков. А многие русскоязычные пользователи крайне редко будут добавлять такую возможность, лично мне - ни к чему,
достаточно английского языка, что бы тебя поняли многие :)
Кто нибудь работал с плагином nsisFirewall 1.2 ? (http://wiz0u.free.fr/prog/nsisFirewall/)
У меня возникла необходимость при установке, занести в список разрешённых связку "программа-файл".
Плагин nsisFirewall показался самым подходящим для этого, т.к. позволяет :
Add an application to Windows Firewall exception list
Remove an application from Windows Firewall exception list
Но не работает...
Даже при компиляции собственного примера из архива плагина - ошибка...
Invalid command: nsisFirewall::AddAuthorizedApplication
Error in script "C:\Program Files\NSIS\Examples\nsisFirewall\Sample.nsi" on line 15 -- aborting creation process
Есть ли иные способы работы с Firewall (для всех ОС) ?
kotkovets
29-11-2010, 14:41
Есть ли иные способы работы с Firewall (для всех ОС) ? »
Для ANSI версии NSIS - копируешь файл nsisFirewall.dll в C:\Program Files\NSIS\Plugins
Для Unicod версии NSIS - копируешь файл nsisFirewallW.dll в C:\Program Files\NSIS\Unicod\Plugins (или как там).
Работает нормально, как на XP, так и на 7 (не проверял на x64 ОС)
В 7 смотри Дополнительные параметры>Правила для входящих поключений - что изменилось.
Name "Sample nsisFirewall"
OutFile "Sample.exe"
ShowInstDetails show
Section "Main program"
;Добавляет в список исключений
nsisFirewall::AddAuthorizedApplication "$WINDIR\Notepad.exe" "nsisFirewall Test"
Pop $0
IntCmp $0 0 +3
MessageBox MB_OK "A problem happened while adding program to Firewall exception list (result=$0)"
Return
Exec "rundll32.exe shell32.dll,Control_RunDLL firewall.cpl"
MessageBox MB_OK "Program added to Firewall exception list.$\r$\n(close the control panel before clicking OK)"
;Удаляет из списка исключений
nsisFirewall::RemoveAuthorizedApplication "$WINDIR\Notepad.exe"
Pop $0
IntCmp $0 0 +3
MessageBox MB_OK "$0"
Return
Exec "rundll32.exe shell32.dll,Control_RunDLL firewall.cpl"
MessageBox MB_OK "Program removed to Firewall exception list"
SectionEnd
kotkovets, Хм, или я не понял или ты, одно из двух.
В анси кодировках текста нет возможности использовать более 2х языков, например скрипт *.nsi а в нем содержатся строки текста на русском и на английском, да здесь проблем не будет ни каких. А если как у меня - 8 языков, русский испанский немецкий и прочии и все строки текста находятся в одном *.nsi файле скрипта ?!
Имхо, в этом случае MultiLanguage.nsi летит в трубу вместе с компилятором Нсис Анси. ;)
И будут тебе все языки, доступны в ANSI-NSIS, большинство пользователей используют ANSI сборку NSIS.
Это не так, возможно они и будут, но когда юзер станет юзать свой или другой язык в инсталлере, то вместо текста будут кракозябры по всему инсталлеру.
A Юникод в частности, в этом случае, добавляет поддержку "экзотических" языков. А многие русскоязычные пользователи крайне редко будут добавлять такую возможность, лично мне - ни к чему, достаточно английского языка, что бы тебя поняли многие.
Опять эта песня про "экзотические языки", они тут совершенно не причем.
Проблема в другом, с Юникодом все тексты - всегда и везде, будут отображаться корректно, вне зависимости от языка Системы, или того что выбрал пользователь в диалоге инсталлятора.
MfG MaGoth, WoG.ru-Community.
kotkovets
30-11-2010, 01:52
В анси кодировках текста нет возможности использовать более 2х языков, например скрипт *.nsi а в нем содержатся строки текста на русском и на английском, да здесь проблем не будет ни каких. А если как у меня - 8 языков, русский испанский немецкий и прочии и все строки текста находятся в одном *.nsi файле скрипта ?! »
Касательно выше цитаты, RTFM!
!include "MUI2.nsh"
Caption "MultiLanguage Modern UI Test"
Name "MultiLanguage Test"
OutFile "Test MultiLanguage.exe"
;--------------------------------
!define MUI_WELCOMEPAGE_TITLE "$(WELCOMEPAGE_TITLE)"
;--------------------------------
!define MUI_COMPONENTSPAGE_SMALLDESC
;--------------------------------
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
;--------------------------------
!define MUI_LANGDLL_ALLLANGUAGES
;--------------------------------
!insertmacro MUI_LANGUAGE "Russian" ;first language is the default language
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Spanish"
!insertmacro MUI_LANGUAGE "Indonesian"
!insertmacro MUI_RESERVEFILE_LANGDLL
;--------------------------------
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
;--------------------------------
Section
SetAutoClose true
SectionEnd
;--------------------------------------------------------------------
;Текст описания странички приветствия
LangString WELCOMEPAGE_TITLE ${LANG_RUSSIAN} "ДОБРО ПОЖАЛОВАТЬ!"
LangString WELCOMEPAGE_TITLE ${LANG_ENGLISH} "WELCOME!"
LangString WELCOMEPAGE_TITLE ${LANG_GERMAN} "WILLKOMMEN!"
LangString WELCOMEPAGE_TITLE ${LANG_SPANISH} "BIENVENIDO!"
LangString WELCOMEPAGE_TITLE ${LANG_INDONESIAN} "SELAMAT DATANG!"
Проблема в другом, с Юникодом все тексты - всегда и везде, будут отображаться корректно »
Это и так ясно, приведенные выше пример использования языков, будет корректно отображаться везде. :closed-to
Ещё раз о плагине nsisFirewall.
Что то ведёт он себя на W7 странно и не стабильно. Использовал другой плагин - Simple Firewall Plugin
http://nsis.sourceforge.net/NSIS_Simple_Firewall_Plugin , к которому пока нет вопросов.
beowulf0208
11-12-2010, 09:13
Есть ли возможность у данной программы создавать инсталяторы, у которых была бы возможностью выбора устанавливаемых компонентов?
Т.е. я хочу упаковать в инсталятор несколько папок и мне нужно чтоб в дальнейшем при запуске этого инсталятора он давал выбрать какую папку распаковывать (устанавливать), а какую не надо. Или может кто-нибудь посоветует другую программу для создания данного инсталятора, по функциональности мне подходит SFX модуль в WinRar, но всёже там нет в дальнейшем возможности выборв распакуемых компонентов архива.
kotkovets
11-12-2010, 13:15
beowulf0208
Справочник по NSIS (http://forum.oszone.net/showpost.php?p=1489320)
Шапку темы почитайте вкладку>Документация
Lesterman
12-12-2010, 20:41
Доброе время суток, уважаемые.
Нужно на linux-сервере генерировать установщик программ для windows. msi, exe - неважно - главное, чтобы пользователь на html-странице кликнул на ссылку, скачал инсталлятор и установил у себя программу.
По-моему, nsis - это единственная система, которая на сервере под линуксом способна генерировать windows-инсталляторы.
Проблема в том, что файл makensis под linux нужно собирать из исходников самому.
Я все делал, как написано в статье http://mtaalamu.ru/blog/1370.html или http://www.xdevsoftware.com/blog/post/How-to-Install-the-Nullsoft-Installer-NSIS-on-Linux-.aspx - вылетают ошибки и билдиться программа не хочет. В линуксе я нуб, поэтому не мог ли кто-нибудь выложить уже готовый файл makensis?
Или где скачать его можно? Поиск не помог:(
nibble74
13-12-2010, 16:44
Здравствуте,
возник один вопрос по поводу установки одной программы в скрытом режиме. Запускаю с параметром /S и почти уже перед окончанием установки вылетает окошко с выбором языка, нужно нажать ОК, и далее ещё одно с подтверждением установки настроек по умолчанию, нажать ДА или ОТМЕНА. Так вот, как избежать появления этих окошек. Возможно нужно ещё что-то прописать после параметра /S
подскажите пожалуйста, заранее спасибо
kotkovets
13-12-2010, 18:16
Так вот, как избежать появления этих окошек »
Никак!Только переупаковкой инсталлятора.
Можно пояснить это не желанием (не знанием) или не доработкой "создателя" инсталлятора.
написать скрипт на AutoIt, но это не та тема
kotkovets
16-12-2010, 02:07
Пример выбора одного компонента из нескольких, находящихся в одной группе.
В этом примере был замечен "глюк" NSIS. При нажатии группы "Компоненты", непредсказуемо отмечались секции в группе.
!include "MUI2.nsh"
!include "Sections.nsh"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "File.exe"
SectionGroup /e "Компоненты" IDG
Section "Компонент №1" ID_1
SectionEnd
Section /o "Компонент №2" ID_2
SectionEnd
Section /o "Компонент №3" ID_3
SectionEnd
SectionGroupEnd
Function .onInit
StrCpy $1 ${ID_1}
FunctionEnd
Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${ID_1}
!insertmacro RadioButton ${ID_2}
!insertmacro RadioButton ${ID_3}
!insertmacro EndRadioButtons
FunctionEnd
Решение.
"Отключить" секционную группу и определить начальное состояние компонентов в функции .OnInit
!include "MUI2.nsh"
!include "Sections.nsh"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "File.exe"
SectionGroup /e "Компоненты" IDG
Section "Компонент №1" ID_1
SectionEnd
Section /o "Компонент №2" ID_2
SectionEnd
Section /o "Компонент №3" ID_3
SectionEnd
SectionGroupEnd
Function .onInit
SectionSetFlags ${IDG} ${SECTION_OFF} #отключаем группу
SectionSetFlags ${ID_1} ${SF_SELECTED} #определяем, как отмеченный компонент
StrCpy $1 ${ID_1}
FunctionEnd
Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${ID_1}
!insertmacro RadioButton ${ID_2}
!insertmacro RadioButton ${ID_3}
!insertmacro EndRadioButtons
FunctionEnd
kotkovets
18-12-2010, 19:27
Очередное обновление справочника по NSIS
Что нового?
Дополнительно про переменные.
Примеры кодов:
Множественность запуска
Замена строк в файле
Определение продукта msi
Логические конструкции
Работа со строками:
StrCmp, StrLen, IntCmp
Перевод справки:
Работа с реестром
Работа с ini файлами
Относительные переходы
Безусловные переходы и много др.
Исправлены мелкие недоработки и замечания.
Если вы заметите какие-то ошибки, неточности пожалуйста сообщите мне!
Рассматриваются предложения, что бы вы хотели увидеть в справочнике и чего не хватает.
За помощь в переводе спасибо участнику конференции mshak
Скачать cправочник по NSIS (http://narod.ru/disk/1645638001/NSIS_Help.zip.html)
Кто знает, подскажите пожалуйста, как правильно в скрипте прописать
c:\Documents and Settings\All Users\Application Data\ - ?
если $APPDATA - это c:\Documents and Settings\ user \Application Data\
хочу прописать
CreateDirectory "c:\Documents and Settings\All Users\Application Data\IObit" - только через переменную
так правильно или я ошибаюсь!?:::
SetShellVarContext all
CreateDirectory "$APPDATA\IObit"
kotkovets
19-12-2010, 13:15
SetShellVarContext all
CreateDirectory "$APPDATA\Download Master" »
Это правильно
CyberMaster
19-12-2010, 13:47
Подскажите, как прочитать путь к папке из реестра и запихнуть его в InstallDir ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC