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

kotkovets
05-07-2012, 23:18
Таким образом нормально? »
а зачем и к чему переключать вид реестра в 32-разрядной системе? смысла нет!
Думаю, как красивее можно сделать? »
${IfThen} ${RunningX64} ${|}SetRegView 64${|}
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\6FA8588DEBF295543BD8D53E676560BE" "A4EAA01E8B89A024DB390E25C0326D42" "$INSTDIR\Nero Burning ROM\NeroExpress.exe"
${IfThen} ${RunningX64} ${|}SetRegView 32${|}

wolkow70
06-07-2012, 11:18
kotkovets,
Нормально. Получается, что такую логику можно применить и к такой конструкции?

${If} ${RunningX64}
${EnableX64FSRedirection}
File "${pkgdir}\DivX\DivX.dll"
${DisableX64FSRedirection}
${Else}
File "${pkgdir}\DivX\DivX.dll"
${EndIf}

У меня вызывают затруднение такие символы ${|}, что и в каких случаях ими выделяется?

kotkovets
06-07-2012, 14:16
Получается, что такую логику можно применить и к такой конструкции? »
в макросах ${EnableX64FSRedirection} и ${DisableX64FSRedirection} используется
функция API, которой нет в х32.
У меня вызывают затруднение такие символы ${|}, »
я уже писал поэтому поводу, что:
${If} ${RunningX64}
SetRegView 64
${EndIf}
то же самое, только для одной команды:
${IfThen} ${RunningX64} ${|} SetRegView 64 ${|}
аля стиль Visual Basic (VB)

wolkow70
07-07-2012, 12:32
Товарищи, что-то не собирается инсталлятор с таким вариантом выбора типов деинсталляции:

InstType "un.Полное удаление MyApp" /NOCUSTOM
InstType "un.Удаление компонентов MyApp"

Смысл такой хочу придать:
Есть секция:
"Un.Полное удаление"

И секции
"Un.Удаление компонента 1"
"Un.Удаление компонента 2"
"Un.Удаление компонента 3"

При выборе типа удаления "Полное удаление" должна быть активна только секция "Un.Полное удаление", остальные секции не активны без выбора.
При выборе "un.Удаление компонента" первая секция не активна без выбора, остальные доступны для выбора, но не активны по умолчанию.
Прошу помощи.

K.A.V.
07-07-2012, 13:08
При выборе типа удаления "Полное удаление" должна быть активна только секция "Un.Полное удаление", остальные секции не активны без выбора. »
Сколько можно издеваться? Вы имейте совесть, уже столько всего про секции здесь написано, что мне даже стыдно сейчас это сообщение писать

Читайте посты, читайте справку, вся информация по секциям есть, всё можно сделать!
А уж обычное присваивание флага секциям, если 1 секция отмечена, что может быть проще после всех примеров в этой теме????

От вашей лени я уже в шоке

Прошу помосчи. »
"прошу готовый код"

wolkow70
07-07-2012, 13:11
А это как раз из Справки пример.

InstType "Полная" /NOCUSTOM
- отключает возможность самостоятельного выбора пользователем компонентов.
Пишу в скрипте InstType "un.Полное удаление MyApp" /NOCUSTOM
Но, компилляция не происходит.

А уж обычное присваивание флага секциям »
Флаги присвоены. При запуске деинсталлятора, все изначально отмечается как нужно. Мне нужно, чтобы при "полном удалении" было невозможно изменить состав компонентов.

K.A.V.
07-07-2012, 13:21
А это как раз из Справки пример »
А я вам абсолютно про другое говорю, вы опять не видите, что я вам пишу? Я вам пишу про секции

Вам необходимо использова функцию:

Function .onSelChange
FunctionEnd

В ней используйте команды:
GetCurInstType (пару страничек назад я про неё рассказывал, не помню кому делал пример)
SectionSetFlags

Я вижу этот код уже перед глазами даже без наброска, там буквально пара строк...

wolkow70
07-07-2012, 13:43
Я вам пишу про секции »

А я спрашивал про опции комманды InstType. Меня интересует почему они не работают.
В справке указаны возможные параметры /NOCUSTOM, /CUSTOMSTRING, /COMPONENTSONLYONCUSTOM.

wolkow70
07-07-2012, 15:05
K.A.V.,
Пришлось таки делать через Function un.onSelChange.
И еще в Function un.onInit прописать комманды для инициализации значений при запуске деинсталлятора.

Кто-нибудь подскажет, как из выпадающего списка типов инсталляции убрать "По выбору", дабы его не было вообще?

K.A.V.
07-07-2012, 15:13
А я спрашивал про опции комманды InstType. Меня интересует почему они не работают. »
Может быть, нужно было попробовать разные варианты, и посмотреть какую ошибку пишет компилятор в данных строках?

Кто-нибудь подскажет, как из выпадающего списка типов инсталляции убрать "По выбору", дабы его не было вообще? »


Создайте "пустой" Insttype

Insttype /NOCUSTOM
Insttype "Первая секция"
Insttype "Вторая секция"

wolkow70
07-07-2012, 16:09
C деинсталлятором такой вариант не проходит:
InstType un. /NOCUSTOM
Usage: InstType [un.]install_type_name | /NOCUSTOM | /CUSTOMSTRING=str | /COMPONENTSONLYONCUSTOM

K.A.V.
08-07-2012, 16:32
C деинсталлятором такой вариант не проходит: »
Значит там в самом NSIS ошибка, от нас это не зависит...

Либо делайте свою страничку с выбором типа удаления (что более разумно на мой взгляд)
Либо, можно вот так "извратиться" над NSIS (вроде бы работает)


InstType "un.Полное удаление MyApp"
InstType "/CUSTOMSTRING=Удаление компонентов MyApp"

Section "un.Секция №1"
SectionIn 1
SectionEnd

Section "un.Секция №2"
SectionIn 3
SectionEnd

Section "un.Секция №3"
SectionIn 1
SectionEnd

Section "un.Секция №4"
SectionIn 3
SectionEnd


Вообщем тип удаления "Удаление компонентов MyApp" вообще, по идее, идёт как пункт "Выборочное удаление", мы просто изменили название секции, за место "Выборочно" поставили свой текст

И обратите внимание на SectionIn 3 на циферку 3, это будет тип удаления "Удаление компонентов MyApp"

Запустил, проверил, вроде работает...Ну а обработку типа удаления в коде, я думаю вы уже сами определите, пример команды я давал здесь уже

wolkow70
09-07-2012, 14:40
K.A.V.,
При таком варианте:
InstType "un.Полное удаление MyApp"
InstType "/CUSTOMSTRING=Удаление компонентов MyApp"
в функции типа:
Function un.onSelChange
GetCurInstType $0
MessageBox MB_OK $0
${If} $0 == "0"
SectionSetFlags ${Component1} 16
SectionSetFlags ${Component2} 16
SectionSetFlags ${Component3} 16
${ElseIf} $0 == "1"
SectionSetFlags ${Component1} 0
SectionSetFlags ${Component2} 0
SectionSetFlags ${Component3} 0
${EndIf}
FunctionEnd
Всегда при переключении идет возврат $0 == "0" , что не дает возможности играть флагами в зависимости от типа установки.
C вариантом :
InstType "un.Полное удаление"
InstType "un.Удаление компонентов"
Возврат значений был 0 , 1 , 32


Section Uninstall Uninstaller
SectionIn 1 RO
--удаление полное
SectionEnd

Section "Un.Удаление Component1" Component1
SectionIn 3
!insertmacro UnDeleteComponent1
SectionEnd

Section "Un.Удаление Component2" Component2
SectionIn 3
!insertmacro UnDeleteComponent2
SectionEnd

Section "Un.Удаление Component3" Component3
SectionIn 3
!insertmacro UnDeleteComponent3
SectionEnd

K.A.V.
09-07-2012, 16:33
Всегда при переключении идет возврат $0 == "0" , что не дает возможности играть флагами в зависимости от типа установки. »
Тогда мы "поиграем" с NSIS с помощью WinMessages :biggrin:

Не забудьте подключить
!include WinMessages.nsh

И делаем вот так:

Function un.onSelChange
FindWindow $0 '#32770' '' $HWNDPARENT
GetDlgItem $1 $0 1017
SendMessage $1 ${CB_GETCURSEL} "" "" $0
FunctionEnd


В переменную $0 будет помещен результат:
0 - Полное удаление MyAp
1 - Удаление компонентов MyApp

wolkow70
12-07-2012, 17:49
Function .onSelChange
!insertmacro StartRadioButtons $7ZRBTN
!insertmacro RadioButton ${7zContextMinimal}
!insertmacro RadioButton ${7zContextFull}
SectionSetFlags ${7zContext} ${SECTION_OFF}
!insertmacro EndRadioButtons
;
!insertmacro StartRadioButtons $001RBTN
!insertmacro RadioButton ${001ContextMinimal}
!insertmacro RadioButton ${001ContextFull}
SectionSetFlags ${001Context} ${SECTION_OFF}
!insertmacro EndRadioButtons
FunctionEnd

Почему-то, при коцании по секциям, раскрываются все секции в радио-бутонах у которых есть команда типа SectionSetFlags ${} ${SECTION_OFF}

K.A.V.
14-07-2012, 13:44
У кого есть возможность протестировать спец. билд NSIS на 64-bit системе?
https://bitbucket.org/dgolub/nsis64/downloads

Якобы, есть возможность обойти ограничение в 2 Гб, но только на 64-bit системе, у самого данной возможности нет, если кто сможет - протестируйте и сообщите сюда

Vincent7
15-07-2012, 22:41
K.A.V., приветствую вас. Подскажите пожалуйста, как сделать чтобы на странице компонентов если не выбран ни один компонент, то кнопка 'далее' была неактивна?

MKN
16-07-2012, 19:35
Vincent7,
Уже был пример : http://forum.oszone.net/showpost.php?p=1915688&postcount=2705

Vincent7
17-07-2012, 01:14
MKN, a попроще нельзя ли как нибудь?

MKN
18-07-2012, 13:46
a попроще нельзя ли как нибудь? »
В NSIS нельзя "как нибудь". А нужно так, как надо и как правильно. Другое дело - для правильных решений возможны варианты достижения положительного результата.




© OSzone.net 2001-2012