PDA

Показать полную графическую версию : [архив].: NSIS - все вопросы :.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 [46] 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

MKN
27-11-2010, 13:54
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

MaGoth
29-11-2010, 03:39
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 Юникод в частности, в этом случае, добавляет поддержку "экзотических" языков. А многие русскоязычные пользователи крайне редко будут добавлять такую возможность, лично мне - ни к чему,
достаточно английского языка, что бы тебя поняли многие :)

MKN
29-11-2010, 12:50
Кто нибудь работал с плагином 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

MaGoth
29-11-2010, 19:03
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

MKN
02-12-2010, 15:21
Ещё раз о плагине 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)

punsh
19-12-2010, 12:59
Кто знает, подскажите пожалуйста, как правильно в скрипте прописать
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