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

wolkow70
21-06-2012, 11:12
Из СПРАВКИ:

Макрос ${AndIf} сработает (при выполнении условия равенства в ${AndIf}) в том случае,
если выполнится условие равенства в макросе ${If}, в ином случае ${AndIf} игнорируется.

Если в макросе ${If} выполнится условие равенства, то макрос ${OrIf} будет срабатывать всегда, игнорируя условия равенства значений. Если в макросе ${If} не выполнится условие равенства, то макрос ${OrIf} сработает, если выполнится условие равенства значений.

Поясните пожалуйста сколько раз могут последовательно повторяться макросы AndIf и OrIf ?

Пример на макросе ${IfNotThen}:

По этому макросу из справки для меня не совсем понятно как он работает.

kotkovets
21-06-2012, 11:59
Поясните пожалуйста сколько раз могут последовательно повторяться макросы AndIf и OrIf ? »
Сколь угодно теоритически, на практике сложнее - преобладание идет составных условий.
Здесь нужно правильно раставить логику, просто размышлять логически.
AndIf - логика И, срабатывает при выполнении двух условий, типа, если только палка колбасы
и сарделька, условие выполнения наличие двух продуктов...
OrIf - логика ИЛИ, срабатывает. если одно из условий выполняется, независимо от другога, к примеру,
если палка колбасы ИЛИ сарделька...достаточно имения одного из перечисленных продуктов. чтобы условие выполнилось.
Пример на макросе ${IfNotThen}:По этому макросу из справки для меня не совсем понятно как он работает. »
Условие отрицания - НЕ
то же самое для чисел с одной командой
${If} 5 != 6
;5 не равно 6
${EndIf}
для выражений, текста и т.д
${IfNot} колбаса == колбаса
;НЕльзя колбасу кушать
${EndIf}

wolkow70
21-06-2012, 13:09
С макросами ${AndIf} ${OrIf} ${IfNot} в общем понятно.
Не понятно ${IfThen} ${IfNotThen}

Например в такой логике :

${IfThen} ${RunningX64} ${|}SetRegView 64${|}
Здесь выполняются комманды
${IfThen} ${RunningX64} ${|}SetRegView 32${|}

kotkovets
21-06-2012, 13:18
Не понятно ${IfThen} ${IfNotThen} »
Это тоже самое, что

${If} $0 == 5
MessageBox MB_OK "$$0 = $0"
${EndIf}
;-------одной строкой
${IfThen} $0 == 5 ${|} MessageBox MB_OK "$$0 = $0" ${|}

/**********************************************/

${IfNot} $0 == колбаса
MessageBox MB_OK $0
${EndIf}
;-------одной строкой
${IfNotThen} $0 == колбаса ${|} MessageBox MB_OK $0 ${|}

Сокращенное написание одной команды в условии вместо 3 строк и все!

Vincent7
21-06-2012, 17:26
kotkovets, я так понимаю, с моим вопросом вы не поможете?

wolkow70
23-06-2012, 11:45
kotkovets,
Возник вопрос по использованию ${Errors} в логических конструкциях
Код:
ClearErrors
ReadINIStr $0 "$INSTDIR\operaprefs_default.ini" "System" "Multi User"
${If} $0 == "0"
SetOutPath "$INSTDIR\profile"
${ElseIf} $0 == "1"
SetOutPath "$APPDATA\Opera\Opera"
${ElseIf} ${Errors}
SetOutPath "$APPDATA\Opera\Opera"
${EndIf}

Так допустимо использовать? Нужно, если значение = 0 , то SetOutPath "$INSTDIR\profile , а если значение = 1 или параметр в ini вообще отсутствует, то SetOutPath "$APPDATA\Opera\Opera"

kotkovets
23-06-2012, 12:41
Так допустимо использовать? »
конечно, можно добавить Else - иные условия, не удовлетворяющие выше условию и "объединить"
ClearErrors
ReadINIStr $0 "$INSTDIR\operaprefs_default.ini" "System" "Multi User"
${If} $0 == 0
SetOutPath "$INSTDIR\profile"
${Else}
ClearErrors
SetOutPath "$APPDATA\Opera\Opera"
${EndIf}
---
Кстати, очень часто попадает в файле такая строка:
[System]
Multi User=0 ; If enabled Opera will use Windows profiles to store individual user settings
В этом случае: $0 = 0 ; If enabled Opera will use Windows profiles to store individual user settings
Поэтому из полученной строки, лучше всего брать только первый символ и затем под логику отдавать:
StrCpy $0 $0 1

wolkow70
23-06-2012, 13:47
StrCpy $0 $0 1 »
Каждый раз надо прописывать в секциях перед логикой или один раз где-нибудь? Перед строкой ReadINIStr $0 или после?

kotkovets
23-06-2012, 13:51
Перед строкой ReadINIStr $0 »
после ReadINIStr

wolkow70
23-06-2012, 14:23
Что-то не найду в справке как после команды
WriteINIStr имя_файла "секция" "параметр" "значение_параметра"
создать пустую следующую (или последнюю) строку.

kotkovets
23-06-2012, 15:07
Что-то не найду в справке как после команды
WriteINIStr имя_файла "секция" "параметр" "значение_параметра"
создать пустую следующую (или последнюю) строку »
Символы строк:
$\r --> переход каретки на новую строку
$\n --> создание новой строки
WriteINIStr $EXEDIR\test.ini "test" "test" "test$\n"
WriteINIStr $EXEDIR\test.ini "test1" "test1" "test1$\n"
WriteINIStr $EXEDIR\test.ini "test2" "test2" "test2$\n"

wolkow70
24-06-2012, 17:54
kotkovets,

Возникло два практических вопроса:
1. Как действует флаг типа SetOverwrite on
- в пределах секции?
- применительно к конкретной команде?
- На протяжении всего скрипта?
- Пока не будет заменен другим флагом?
2. Существует ли несложный способ перед указанием команды RMDir /r "$INSTDIR" проверить не является ли удаляемая папка важной папкой Windows (типа $SYSDIR, $WINDIR, $APPDATA, $PROGRAMMFILES и т.п.?

kotkovets
24-06-2012, 19:28
SetOverwrite on »
- На протяжении всего скрипта
- Пока не будет заменен другим флагом
К командам распаковки во время инсталляции - перезаписывать файл или нет(заменять новее старый файл)Существует ли несложный способ перед указанием команды RMDir /r "$INSTDIR" проверить не является ли удаляемая папка важной папкой Windows (типа $SYSDIR, $WINDIR, $APPDATA, $PROGRAMMFILES и т.п.? »
типа того:

${If} $INSTDIR == $SYSDIR
MessageBox MB_OK "Папка важная!"
Abort
${EndIf}

wolkow70
24-06-2012, 20:42
На протяжении всего скрипта »
То есть, если его выставить в первой секции, отвечающей за распаковку файлов, то он будет действовать и во всех других секциях, если в них не будет выставлен иной флаг?
К командам распаковки во время инсталляции »
К командам типа CopyFiles и Rename он не относится?

kotkovets
24-06-2012, 21:32
То есть, если его выставить в первой секции, отвечающей за распаковку файлов, то он будет действовать и во всех других секциях, если в них не будет выставлен иной флаг? »
попробуйте, чем сто раз писать...
К командам типа CopyFiles и Rename он не относится? »
нет

Shivaki
25-06-2012, 11:32
Добрый день! Выбирается ПО для создания инсталляции. Предполагается долгосрочное использование данного ПО для распространения большого количества разрабатываемых программ (организация). Очень нравится NSIS по своим возможностям. Но смущает, что текущая версия от 2009 года. Что вы можете сказать по поводу проекта NSIS: он еще жив, будет развиваться или как?

kotkovets
25-06-2012, 11:40
Что вы можете сказать по поводу проекта NSIS: он еще жив, будет развиваться или как? »
Для текущих задач хорошо подходит - мощная поддержка WinAPI и плагинов.
Насчет развития: или как..:)

Shivaki
25-06-2012, 12:08
Для текущих задач хорошо подходит - мощная поддержка WinAPI и плагинов.
Насчет развития: или как.. »

Да, для любых современных install-задач отличное и очень мощное средство. Но как-то не хочется начинать работать с проектом, который уже заведомо не поддерживается :(, т.к. это не разовая задача

K.A.V.
25-06-2012, 13:06
Но как-то не хочется начинать работать с проектом, который уже заведомо не поддерживается »
Попробуйте реализовать сложный установщик в различных системах создания инсталляций, и сравните, какой покажется вам самым гибким, более мощным и более простым в плане написания скриптов и команд, может тогда и определитесь с выбором

Krinkels
25-06-2012, 14:08
он еще жив, будет развиваться или как? »
NSIS как Цой, он жив :)
А так, из проекта ушел главный разработчик, так что будет новая версия или нет толком неизвестно.
Как по мне, так у NSIS достаточно своеобразный синтаксис, в который сразу тяжело въехать. За то есть огромная куча плагинов, через которые реализовано очень многое.




© OSzone.net 2001-2012