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

K.A.V.
21-01-2010, 13:06
Попробуйте удалить:
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, если вдруг узнаешь ответ на свой вопрос, отпишись тут пожалуйста.

K.A.V.
21-01-2010, 18:02
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 то автоматом выбирался английский?

K.A.V.
21-01-2010, 22:52
А можно какой нить пример что бы было понятно как и где эти команды применить? »
В файле справки всё написано, в "указатель" введите слово "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 поможет :)

hb860
21-01-2010, 23:34
1. Как сделать выбор языка перед установкой? »
Уважаемый мной KAV на это ответил
Я Вас еще буду мучать что бы Вы мне помогли разобраться с добавлением окон »
Я четвертый день не успеваю дописать статью, я про это пишу как раз сейчас. С Английским у вас как ? Если хоть чуть-чуть знаете - читайте file:///C:/Program%20Files/NSIS/Docs/nsDialogs/Readme.html Там по шагам.
NSIS так и поступает, если вы добавили в установщик язык, который используется в ОС основным, то данный язык и устанавливается на выбор »
У меня почему то по умолчанию английский выбирается на русской системе. Я перепроверю.

Почему должен? Это по правилам так должно быть? Или это глюк nsis? »
Такие ограничения. Галка должна стоять

K.A.V.
21-01-2010, 23:45
У меня почему то по умолчанию английский выбирается на русской системе. Я перепроверю. »
В функции 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
:)

hb860
21-01-2010, 23:59
HKEY_USERS\.DEFAULT\Control Panel\International »
я полагаю, лучше HKEY_CURRENT_USER\Control Panel\International\locale
Я не ставлю задачу выбрать язык. Я просто отписался, что автоматом не выбирается. Вот на это:NSIS так и поступает, »
Не поступает он так

K.A.V.
22-01-2010, 00:13
Я не ставлю задачу выбрать язык. »
И я :)

Не поступает он так »
Я не спорю, если наверняка не уверен, я так написал, потому что у меня при любом расположении строки
!insertmacro MUI_LANGUAGE "Russian"
всегда по умолчанию выбирается русский язык, хоть и строчка эта находится и в середине/в конце/где угодно списка языков
;)

Painkiller
22-01-2010, 17:27
K.A.V. ,hb860 , у меня такой вопрос. Можно ли сделать чтобы в названии секции было ещё и количество компонентов входящих в эту секцию ???

K.A.V.
22-01-2010, 17:35
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 деинсталляторов?
И куда поместить код, который будет выполнятся в любом случае, независимо от того какую программу выбрал юзер?
Заранее благодарю)

K.A.V.
22-01-2010, 18:27
Как мне прописать что должен делать каждый из 3 деинсталляторов? »
:o прикольно
Вообще, когда вы создаёте инсталляционный пакет, то принято считать, что вы делаете инсталлятор для 1-ой программы, и деинсталлятор расчитан на 1 программу :)

И куда поместить код, который будет выполнятся в любом случае, независимо от того какую программу выбрал юзер? »
Вот здесь не понятно, вы хотите, чтобы вне зависимости от того, какой из деинсталляторов запущен, выполнялись одни и те же действия?
Если да, то все действия необходимо прописывать в секцию Uninstall

NoName01.cpp
22-01-2010, 18:46
Вообще, когда вы создаёте инсталляционный пакет, то принято считать, что вы делаете инсталлятор для 1-ой программы, и деинсталлятор расчитан на 1 программу »
Может тогда можна сделать деинсталлятор с 3 секциями?

Вот здесь не понятно, вы хотите, чтобы вне зависимости от того, какой из деинсталляторов запущен, выполнялись одни и те же действия? »

Нет, второй вопрос был не связян с деинсталлятором. Я имел ввиду куда поместить код инсталлятора, который будет выполнятся в любом случае, независимо от того какую секцию выбрал юзер.

K.A.V.
22-01-2010, 19:04
Посмотрите, может это то, что вам нужно :)


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 путь к запущенному деинсталлятору

hb860
22-01-2010, 19:19
Может тогда можна сделать деинсталлятор с 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) почитать

hb860
22-01-2010, 22:45
Я имел ввиду куда поместить код инсталлятора, который будет выполнятся в любом случае, независимо от того какую секцию выбрал юзер. »
Поместите эту секцию после ВСЕХ ОСТАЛЬНЫХ, перед секцией Uninstall
Section "-post"
...поместите сюда нужный вам код, он будет выполняться ВСЕГДА
SectionEnd




© OSzone.net 2001-2012