Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Попробуйте удалить:
StrCpy $1 ${g1o1}
StrCpy $2 ${g2o1}
а вообще, в каждой группе просто должен быть по умолчанию отмечен хотя бы 1 компонент для установки
Если мышкой нажать на квадратик группы (именно на квадратик группы а не копонента) то выбирается 2 компонента из трех, хотя должен выбираться только один. »
Так и должно быть, при отметки группы, помечаются все компоненты, которые находятся в данной группе
dracosha
21-01-2010, 13:41
Попробуйте удалить: »
Это я уже несколько раз пробовал :(
а вообще, в каждой группе просто должен быть по умолчанию отмечен хотя бы 1 компонент для установки »
Почему должен? Это по правилам так должно быть? Или это глюк nsis?
Так и должно быть, при отметки группы, помечаются все компоненты, которые находятся в данной группе »
Но эти компоненты выбираются один из трех. Даже если так и должно быть, то по-моему это не правильно.
Народ! Пожалуйста! Помогите решить эти проблемки:
1. тут (http://forum.oszone.net/post-1325822-298.html)
2. тут (http://forum.oszone.net/post-1325909-300.html)
NoName01.cpp
21-01-2010, 15:04
Здраствуйте, я только начал изнучать NSIS. У меня два вопроса:
1. Как сделать выбор языка перед установкой?
2. Как сделать разное описание секций для разных языков?
Заранее спасибо!
dracosha
21-01-2010, 16:25
Здраствуйте, я только начал изнучать NSIS. У меня два вопроса: »
У меня такая же ситуация.
NoName01.cpp, если вдруг узнаешь ответ на свой вопрос, отпишись тут пожалуйста.
dracosha, не знаю, может это и глюк NSIS...
Если секций не много, то думаю, что можно организовать ручную проверку, т.е. самому прописать команды на снятие/отметку галочек с секций, с использованием команд SectionGetFlags и SectionSetFlags :)
1. Как сделать выбор языка перед установкой? »
В начале кода добавить
!insertmacro MUI_LANGUAGE "Russian" ;первый язык - язык по умолчанию
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_RESERVEFILE_LANGDLL
Добавить в функцию OnInit (данный макрос вызовет диалог выбора языка)
!insertmacro MUI_LANGDLL_DISPLAY
2. Как сделать разное описание секций для разных языков? »
LangString NameSec1 ${LANG_Russian} "Имя 1 секции на русском"
LangString NameSec2 ${LANG_Russian} "Имя 2 секции на русском"
LangString NameSec3 ${LANG_Russian} "Имя 3 секции на русском"
LangString NameSec1 ${LANG_ENGLISH} "Имя 1 секции на английском"
LangString NameSec2 ${LANG_ENGLISH} "Имя 2 секции на английском"
LangString NameSec3 ${LANG_ENGLISH} "Имя 3 секции на английском"
Секции
Section /o $(NameSec1) section1
SectionEnd
Section /o $(NameSec2) section2
SectionEnd
Section /o $(NameSec3) section3
SectionEnd
P.S.
Новичкам очень рекомендую заглянуть в каталог "\Program Files\NSIS\Examples", там много разных примеров ;)
dracosha
21-01-2010, 21:32
dracosha, не знаю, может это и глюк NSIS...
Если секций не много, то думаю, что можно организовать ручную проверку, т.е. самому прописать команды на снятие/отметку галочек с секций, с использованием команд SectionGetFlags и SectionSetFlags »
А можно какой нить пример что бы было понятно как и где эти команды применить?
Секций на самом деле много... Примерно около 100-120. И это еще не предел...
Но компонентов которые подлежат выбору один из 2 или более будет примерно около пяти-семи точно не помню.
Я Вас еще буду мучать что бы Вы мне помогли разобраться с добавлением окон :blush2: и при этом буду просить что бы Вы мне помогли нарисовать или изменить положение деталей в этих окнах :blush2:
В начале кода добавить »
Что нужно сделать что бы язык по умалчанию был как в ОС... А если ОС на каком-то другом языке, который не поддерживается скриптом nsis то автоматом выбирался английский?
А можно какой нить пример что бы было понятно как и где эти команды применить? »
В файле справки всё написано, в "указатель" введите слово "SectionGetFlags" и примерчики там будут.
Section /o "test1" section1
SectionEnd
Section /o "test2" section2
SectionEnd
Section /o "test3" section3
SectionEnd
Function .onSelChange
SectionGetFlags ${section1} $1
SectionGetFlags ${section2} $2
SectionGetFlags ${section3} $3
StrCmp $1 "1" 0 N1
SectionGetFlags ${section2} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${section2} $0
SectionGetFlags ${section3} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${section3} $0
N1:
StrCmp $2 "1" 0 N2
SectionGetFlags ${section1} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${section1} $0
SectionGetFlags ${section3} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${section3} $0
N2:
StrCmp $3 "1" 0 N3
SectionGetFlags ${section1} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${section1} $0
SectionGetFlags ${section2} $0
IntOp $0 $0 & ${SECTION_OFF}
SectionSetFlags ${section2} $0
N3:
FunctionEnd
Что нужно сделать что бы язык по умалчанию был как в ОС... »
NSIS так и поступает, если вы добавили в установщик язык, который используется в ОС основным, то данный язык и устанавливается на выбор :)
А если ОС на каком-то другом языке, который не поддерживается скриптом nsis то автоматом выбирался английский? »
В OnInit функции, перед
!insertmacro MUI_LANGDLL_DISPLAY
добавить
strcpy $LANGUAGE "1033"
Я Вас еще буду мучать что бы Вы мне помогли разобраться с добавлением окон и при этом буду просить что бы Вы мне помогли нарисовать или изменить положение деталей в этих окнах »
Ну я сейчас занят своим проектом, так что врядли я смогу тратить на вас много своего времени, тем более что нужно писать практически готовый код...
dracosha
21-01-2010, 23:16
Ну я сейчас занят своим проектом, так что врядли я смогу тратить на вас много своего времени, тем более что нужно писать практически готовый код... »
Ну тогда буду надеятся на помощь других форумчан, а там глядишь и hb860 поможет :)
1. Как сделать выбор языка перед установкой? »
Уважаемый мной KAV на это ответил
Я Вас еще буду мучать что бы Вы мне помогли разобраться с добавлением окон »
Я четвертый день не успеваю дописать статью, я про это пишу как раз сейчас. С Английским у вас как ? Если хоть чуть-чуть знаете - читайте file:///C:/Program%20Files/NSIS/Docs/nsDialogs/Readme.html Там по шагам.
NSIS так и поступает, если вы добавили в установщик язык, который используется в ОС основным, то данный язык и устанавливается на выбор »
У меня почему то по умолчанию английский выбирается на русской системе. Я перепроверю.
Почему должен? Это по правилам так должно быть? Или это глюк nsis? »
Такие ограничения. Галка должна стоять
У меня почему то по умолчанию английский выбирается на русской системе. Я перепроверю. »
В функции onInit, перед
!insertmacro MUI_LANGDLL_DISPLAY
пропиши
strcpy $LANGUAGE "1049"
Если не хочешь так кардинально, то сначала прочитай значение параметра sCountry в ветке
HKEY_USERS\.DEFAULT\Control Panel\International
и если значение не "Россия", то просто пропускай назначение переменной $LANGUAGE ;)
Готовый код:
Function .onInit
ReadRegStr $0 HKU ".DEFAULT\Control Panel\International" "sCountry"
StrCmp $0 "Россия" 0 +2
strcpy $LANGUAGE "1049"
!insertmacro MUI_LANGDLL_DISPLAY
functionEnd
:)
HKEY_USERS\.DEFAULT\Control Panel\International »
я полагаю, лучше HKEY_CURRENT_USER\Control Panel\International\locale
Я не ставлю задачу выбрать язык. Я просто отписался, что автоматом не выбирается. Вот на это:NSIS так и поступает, »
Не поступает он так
Я не ставлю задачу выбрать язык. »
И я :)
Не поступает он так »
Я не спорю, если наверняка не уверен, я так написал, потому что у меня при любом расположении строки
!insertmacro MUI_LANGUAGE "Russian"
всегда по умолчанию выбирается русский язык, хоть и строчка эта находится и в середине/в конце/где угодно списка языков
;)
Painkiller
22-01-2010, 17:27
K.A.V. ,hb860 , у меня такой вопрос. Можно ли сделать чтобы в названии секции было ещё и количество компонентов входящих в эту секцию ???
K.A.V. ,hb860 , у меня такой вопрос. Можно ли сделать чтобы в названии секции было ещё и количество компонентов входящих в эту секцию ??? »
Что-то не понятно...а прописать самому никак?
Может пригодится:
Section /o "test1" section1
SectionEnd
Читаем имя секции, затем к имени секции добавляем путь к каталогу Windows
SectionGetText ${section1} $0
StrCpy $0 "$0 - $WINDIR"
SectionSetText ${section1} $0
NoName01.cpp
22-01-2010, 18:19
Здраствуйте, мой инсталлятор ставит 3 программы, то есть у меня 3 секции, которые ставят 3 разных деинсталлятора для каждой программы. Что-то типа такого:
Section "Sec1" Sec1
...
WriteUninstaller "$INSTDIR\Sec1\uninstall.exe"
SectionEnd
Section "Sec2" Sec2
...
WriteUninstaller "$INSTDIR\Sec2\uninstall.exe"
SectionEnd
Section "Sec2" Sec2
...
WriteUninstaller "$INSTDIR\Sec2\uninstall.exe"
SectionEnd
Как мне прописать что должен делать каждый из 3 деинсталляторов?
И куда поместить код, который будет выполнятся в любом случае, независимо от того какую программу выбрал юзер?
Заранее благодарю)
Как мне прописать что должен делать каждый из 3 деинсталляторов? »
:o прикольно
Вообще, когда вы создаёте инсталляционный пакет, то принято считать, что вы делаете инсталлятор для 1-ой программы, и деинсталлятор расчитан на 1 программу :)
И куда поместить код, который будет выполнятся в любом случае, независимо от того какую программу выбрал юзер? »
Вот здесь не понятно, вы хотите, чтобы вне зависимости от того, какой из деинсталляторов запущен, выполнялись одни и те же действия?
Если да, то все действия необходимо прописывать в секцию Uninstall
NoName01.cpp
22-01-2010, 18:46
Вообще, когда вы создаёте инсталляционный пакет, то принято считать, что вы делаете инсталлятор для 1-ой программы, и деинсталлятор расчитан на 1 программу »
Может тогда можна сделать деинсталлятор с 3 секциями?
Вот здесь не понятно, вы хотите, чтобы вне зависимости от того, какой из деинсталляторов запущен, выполнялись одни и те же действия? »
Нет, второй вопрос был не связян с деинсталлятором. Я имел ввиду куда поместить код инсталлятора, который будет выполнятся в любом случае, независимо от того какую секцию выбрал юзер.
Посмотрите, может это то, что вам нужно :)
Section "Sec1" Sec1
...
WriteUninstaller "$INSTDIR\Sec1\uninstall.exe"
SectionEnd
Section "Sec2" Sec2
...
WriteUninstaller "$INSTDIR\Sec2\uninstall.exe"
SectionEnd
Section "Sec3" Sec3
...
WriteUninstaller "$INSTDIR\Sec3\uninstall.exe"
SectionEnd
!include "FileFunc.nsh"
Section Uninstall
${GetParent} "$EXEPATH" $R0
StrCmp $R0 "$INSTDIR\Sec1" 0 +2
call UnInstall_SEC1
StrCmp $R0 "$INSTDIR\Sec2" 0 +2
call UnInstall_SEC2
StrCmp $R0 "$INSTDIR\Sec3" 0 +2
call UnInstall_SEC3
SetAutoClose true
SectionEnd
Function UnInstall_SEC1
...
FunctionEnd
Function UnInstall_SEC2
...
FunctionEnd
Function UnInstall_SEC3
...
FunctionEnd
*Команда ${GetParent} помещает в переменную $R0 путь к запущенному деинсталлятору
Может тогда можна сделать деинсталлятор с 3 секциями? »
Легко.
Section Uninstall secidx01
SectionIn 1 RO
DeleteRegKey HKLM "Software\Mail.Ru\Agent"
RMDir /r "$INSTDIR"
SetShellVarContext all
RMDir /r "$SMPROGRAMS\Mail.ru"
Delete "$Desktop\${PRODUCT_NAME}.lnk"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
SetAutoClose true
SectionEnd
Section "Un.Удалить папку данных"
SectionIn 1
SetShellVarContext current
RMDir /r "$APPDATA\Mra\"
SectionEnd
Section "Un.Удалить настройки реестра"
SectionIn 1
SetShellVarContext current
DeleteRegKey HKCU "Software\Mail.Ru\Agent"
SectionEnd
Function un.onInit
SectionSetText ${secidx01} "Удалить приложение"
FunctionEnd
Можете ещё вот это (http://www.winreview.ru/comment.php?comment.news.69) почитать
Я имел ввиду куда поместить код инсталлятора, который будет выполнятся в любом случае, независимо от того какую секцию выбрал юзер. »
Поместите эту секцию после ВСЕХ ОСТАЛЬНЫХ, перед секцией Uninstall
Section "-post"
...поместите сюда нужный вам код, он будет выполняться ВСЕГДА
SectionEnd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC