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

Vincent7
18-07-2012, 14:14
MKN, окей, возможен ли другой вариант для решения моей задачи?

MKN
18-07-2012, 15:19
Vincent7,
возможен ли другой вариант для решения моей задачи? »
Сделать собственную страничку выбора компонентов с собственой кнопкой.
Кода будет побольше, но и гибкости с манипуляциями кнопкой, тоже поболее - результат тот же.

K.A.V.
18-07-2012, 15:49
MKN, окей, возможен ли другой вариант для решения моей задачи? »
Интересно...Вам уже мало того, что вам предлагают готовое решение вашего вопроса?

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

Вам предлагают решение, вам оно не нравится
Вывод: делайте сами и делайте "что-то новенькое"

КУДА ещё проще того кода, который вам предоставили???
Перечитать статусы всех секций и блокировать/не блокировать кнопку...

Либо вам просто лень почитать справку и вникнуть в значение команд, больше к этому варианту склоняюсь как обычно
Или у меня уже мания на лень людей, всех подозреваю :lol:

Vincent7
18-07-2012, 17:12
K.A.V., тогда подскажите просто как заблокировать кнопку 'далее' на странице компонентов. Я так понимаю если сделать вот так -
СектионГетФлагс{секция} $Р1
{$Иф} $Р1==0
код блокировки кнопки
{$ендиф}

Сработает? :lol:

K.A.V.
18-07-2012, 17:49
СектионГетФлагс{секция} $Р1
{$Иф} $Р1==0
код блокировки кнопки
{$ендиф}
Сработает? »
Именно такой код - нет, не сработает, приведите его в код NSIS скрипта, и, если у вас 1 секция, то сработает

Vincent7
18-07-2012, 21:07
K.A.V., отлично! Подскажете код блокировки?:)

K.A.V.
18-07-2012, 21:28
Vincent7,
Уже был пример : http://forum.oszone.net/showpost.php...postcount=2705 »

"Поищите" код блокировки в посте, ссылку на которую вам уже дали, там даже комментарии есть...
Из принципа не дам готовый код

Vincent7
19-07-2012, 02:08
K.A.V., Спасибо. Такой вопрос, можно ли сделать так - проверить наличие такой то папки, если она есть то такой то компонент сделать неактивным и не выбранным?

K.A.V.
19-07-2012, 07:17
проверить наличие такой то папки, если она есть то такой то компонент сделать неактивным и не выбранным? »
Читаем справочку, очень полезный документик

Для данного кода вам нужно использовать команды
DirState
SectionSetFlags

wolkow70
19-07-2012, 14:35
Товарищи, насколько корректным является использовать переходы по безусловным меткам в логической конструкции? Например так:

${If} ${FileExists} "$EXEDIR\1.reg"
GoTo label 1
${ElseIf} ${FileExists} "$EXEDIR\2.reg"
GoTo label 2
${EndIf}
label 1:
label 2:

Или переход по метке допустим только внутри логики ?

K.A.V.
19-07-2012, 14:44
wolkow70, а чем вам не угодили простые конструкции проверки файлов, типа таких...

IfFileExists "$EXEDIR\TEST1.log" label1 0
IfFileExists "$EXEDIR\TEST2.log" label2 0

MessageBox MB_OK|MB_ICONSTOP "Ни одного файла нету"

label1:
MessageBox MB_OK|MB_ICONINFORMATION "Первый файл найден, переходим сюда"

label2:
MessageBox MB_OK|MB_ICONINFORMATION "Первого файла нет, но есть второй"

wolkow70
19-07-2012, 14:58
а чем вам не угодили простые конструкции проверки файлов, типа таких... »
Пока так и сделал. Бывает, что нужно много файлов проверить, тогда лучше в логике через:
${If} ${FileExists}
${OrIf} ${FileExists}

Vincent7
19-07-2012, 17:23
K.A.V., я сделал так http://upwap.ru/2620264
Код компилируется но инсталлятор не запускается, просто висит в процессах и все.

K.A.V.
19-07-2012, 18:11
Код компилируется но инсталлятор не запускается, просто висит в процессах и все. »
А посидеть и проанализоровать кажду строчку своего кода, никак?
Смотрите внимательно... у вас лишний "прыжок" на метку dlc_3, который и вызывает данное поведение инсталлятора



${DirState} "$INSTDIR\BioGame\DLC\DLC_UNC_Pack01" $2
${If} $2 == "1"
IntOp $2 0 | 16
SectionSetFlags ${SEC02} $2
Goto dlc_3
${OrIf} $2 == "-1"
Goto dlc_3
${EndIf}
dlc_3:
Goto dlc_3
${DirState} "$INSTDIR\BioGame\DLC\DLC_EXP_Part02" $3
${If} $3 == "1"
IntOp $3 0 | 16
SectionSetFlags ${SEC03} $3
Goto dlc_4
${OrIf} $3 == "-1"
Goto dlc_4
${EndIf}
dlc_4:


Удалите строку из кода, выделенную жирным шрифтом

Vincent7
19-07-2012, 18:34
K.A.V., премного благодарен :)

Vincent7
19-07-2012, 22:46
K.A.V., а как можно подсчитать количество файлов в папке и ее подпапках? И можно ли сделать так чтобы развёрнутую группу нельзя было свернуть?

K.A.V.
19-07-2012, 23:27
K.A.V., а как можно подсчитать количество файлов в папке и ее подпапках? »
Читайте в справке про функцию Locate, там всё описано

Что-то типа такого получится у вас (поставьте в поиск только файлы)

; В начале кода
!include "FileFunc.nsh"

Function TEST
var /global MyVar
${Locate} "$PROGRAMFILES" "/L=F" "Example3"

MessageBox MB_OK|MB_ICONINFORMATION "Найдено $MyVar файлов"
FunctionEnd


Function Example3
IntOp $MyVar $MyVar + 1
Push $0
FunctionEnd



И можно ли сделать так чтобы развёрнутую группу нельзя было свернуть? »
Пропишите в функцию .onSelChange команду на присвоение флага группе, присваивайте флаг

!define SF_EXPAND 32

Теоретически, должно сработать

msn
20-07-2012, 02:21
если кто знает помогите плиз. хелп (ру) весь прочитал но ответа не нашел.
при установке программы запускается тулбар.ехе и появляется его окно с предложением установить, НО его окно появляется на втором плане. как его вывести на первый план? что бы его окно появилось поверх моего инсталлера?

File "toolbar.exe"

ExecWait "$TEMP\toolbar.exe -rotate=A -title=ToolBar -sid=1"


п.с. а можно ли его окно (1 страница: установить/закрыть) вставить как страницу своего инсталлера (размеры одинаковые) ? (типа как ифрэйм в вебе:) )

спасибо

wolkow70
20-07-2012, 12:48
Не могу найти способ решить такую задачу:

InstType "Сокращенная"
InstType "Полная"
InstType "Минимальная"

Section "Установить для всех Пользователей" MultiUser
command1
SectionEnd

Section /o "Установить для текущего Пользователя" AllUser
command2
SectionEnd

Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${MultiUser}
!insertmacro RadioButton ${AllUser}
!insertmacro EndRadioButtons
FunctionEnd

Function .OnInit
StrCpy $1 ${MultiUser}
FunctionEnd

Задача сделать так, что бы инсталлятор запускался с InstType "Сокращенная" по умолчанию. Без радио-буттона - так оно и есть. Из-за радио-бутона запускается с типом установки "По выбору".
Кто-нибудь может подсказать возможно ли это обойти ?

Krinkels
20-07-2012, 13:08
У кого есть возможность протестировать спец. билд NSIS на 64-bit системе?
https://bitbucket.org/dgolub/nsis64/downloads
Якобы, есть возможность обойти ограничение в 2 Гб, но только на 64-bit системе, у самого данной возможности нет, если кто сможет - протестируйте и сообщите сюда »
Создается exe файл больше 2 гигов, но при установке выдает что возможно дистрибутив поврежден. И подготовка к запуску занимает уж очень большое время. Пробовал паковать 7 гигов, так рядом с инсталятором создается .dat файл размером как раз на 7 гигов. Запускать пробовал, но окончания проверки так и не дождался




© OSzone.net 2001-2012