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

asetin_9207
29-08-2010, 19:06
kotkovets, спасибо новая версия помогла. Теперь хотелось бы уточнить с проверкой.
Идея такая: Имеется 2 компонента (секции). В 1 устанавливаемом компоненте есть файл Х, во втором устанавливаемом компоненте файл Y.
Так вот, допустим, что я выбрал для установки 1-ый компонент и при написании на моей новой страничке текста, он (текст) должен писаться в устанавливаемый компонент Х, если выбрал 2-ой компонент должно писаться в устанавливаемый файл Y.
Создаваться ничего не должно, только писаться в файлах исходя из выбранного компонента (секции). Как это реализовать?
Моя страничка:

Function fnCustomInit
nsDialogs::Create 1018

Pop $Dialog
${NSD_CreateLabel} 0 5u 100u 10u "Введите свой ник"
Pop $Label
${NSD_CreateText} 0 20u 100% 15u "L4D-Portal.Ru"
Pop $Text
nsDialogs::Show
FunctionEnd

Мои секции:


Section "Stryder emulator(для Garena)" secStryder
SectionIn 3
SetOutPath "$INSTDIR"
File /r E:\stryder\*.*

SectionEnd

Section "Revolution Crew emulator(рекомендуемый)" secRevcrew
SectionIn 4 1
SetOutPath "$INSTDIR"
File /r E:\revcrew\*.*

SectionEnd

kotkovets
29-08-2010, 19:17
Вот уже лучше
Теперь хотелось бы уточнить с проверкой.
Идея такая: Имеется 2 компонента (секции). В 1 устанавливаемом компоненте есть файл Х, во втором устанавливаемом компоненте файл Y.
Так вот, допустим, что я выбрал для установки 1-ый компонент и при написании на моей новой страничке текста, он (текст) должен писаться в устанавливаемый компонент Х, если выбрал 2-ой компонент должно писаться в устанавливаемый файл Y.
Создаваться ничего не должно, только писаться в файлах исходя из выбранного компонента (секции). Как это реализовать? »
По понятней изложите, что куда, зачем, какой файл...а то догадываться надоедает!!!

asetin_9207
29-08-2010, 19:29
1 секция - Stryder emulator(для Garena)
2 секция - Revolution Crew emulator(рекомендуемый)
Я запустил установщик, выбрал 1-ую секцию для установки, потом выходит моя страница для смены ника:

Function fnCustomInit
nsDialogs::Create 1018

Pop $Dialog
${NSD_CreateLabel} 0 5u 100u 10u "Введите свой ник"
Pop $Label
${NSD_CreateText} 0 20u 100% 15u "Сюда ввожу текст"
Pop $Text
nsDialogs::Show
FunctionEnd

При установке 1-ой секции устанавливается файл - stryder.ini
Так вот надо сделать так, чтобы вводимый текст на моей страничке менял строку Settings Name=Текст в устанавливаемом файле - stryder.ini

Действие 2-ое:
Я запустил установщик, выбрал 2-ую секцию для установки, потом выходит моя страница для смены ника в которой надо все сделать также как выше, НО уже в другом устанавливаемом файле - rev.ini и строка будет уже такая: steamclient
PlayerName ="Текст"

Коды моих секции:
Секция 1:
Section "Stryder emulator(для Garena)" secStryder
SectionIn 3
SetOutPath "$INSTDIR"
File /r E:\stryder\*.*
SectionEnd
Секция 2:
Section "Revolution Crew emulator(рекомендуемый)" secRevcrew
SectionIn 4 1
SetOutPath "$INSTDIR"
File /r E:\revcrew\*.*
SectionEnd

kotkovets
29-08-2010, 23:07
asetin_9207
Я реализовал че вы хотели,
но тут глюк один, если в секции ничего - не изменять, то получается запись одновременно двух файлов
если изменить чебоксы на секциях, и даже вернуть в первоначальное состояние секций - то нормуль.
Попробуйте реализовать на своей странице:
C помощью команды RadioButton — зависимый флажок-точка, подобно выбору секций, на стр. выбора компонентов
C помощью команды Label - надпись , описание, как в секциях
А от секций "Stryder emulator(для Garena)" и "Revolution Crew emulator(рекомендуемый) вовсе избавиться!

Помогу вам, тока через форум
Готовый вариант не просите!

asetin_9207
29-08-2010, 23:25
Ну чебоксы - это украшение инсталлятора, также как и скин для него. Давайте посмотрим скрипт, который вы реализовали.
Чебокс такой обязателен. Нельзя никак обойти глюк? Может есть код, который исключает запись 2-го файла? Например, что-то наподобие секциях, когда исключаешь файлы скрипта из папки: File /r /x *.nsi *.*

А от секций "Stryder emulator(для Garena)" и "Revolution Crew emulator(рекомендуемый) вовсе избавиться! »
Так эти секцие обязательные, как избавиться?! Не понимаю.

kotkovets
29-08-2010, 23:33
Давайте посмотрим скрипт, который вы реализовали »
смысла нету! скрипт не рабочий.
Со своей страницы проще сделать, я себе делал инсталл с 5-ю зависимыми чебоксами - стандартно, не получилась (через секции).
А вызовом модуля nsDialogs на раз всё сделал!

asetin_9207
29-08-2010, 23:35
я себе делал инсталл с 5-ю зависимыми чебоксами - стандартно »
И никак нельзя оставить навороченную галочку?

Попробуйте реализовать на своей странице:
C помощью команды RadioButton — зависимый флажок-точка, подобно выбору секций, на стр. выбора компонентов
C помощью команды Label - надпись , описание, как в секциях »
Так ведь страница выбора секции и страница ввода ника - разные страницы. Как они будт отражены? Я не понимаю.

kotkovets
30-08-2010, 00:59
Так ведь страница выбора секции и страница ввода ника - разные страницы. Как они будт отражены? Я не понимаю »
Секции "Stryder emulator(для Garena)" и "Revolution Crew emulator(рекомендуемый) скрываем.
из справки:
Section "-hidden section"
SectionEnd
Вот пример:
!include "MUI.nsh"
!include "nsDialogs.nsh"

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
Page custom fnCustomInit fnCustomDestroy ;функция будет выполняться во время открытия стр. MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_Show Page
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

OutFile "test.exe"
InstallDir "$PROGRAMFILES\Left 4 Dead 2\"
ShowInstDetails show

Var Dialog
Var Label
Var Text
Var CheckBox
Var CheckBox1

Function fnCustomInit
nsDialogs::Create 1018
Pop $Dialog

!insertmacro MUI_HEADER_TEXT "Выбор ника" " Ввод своего ника"

${NSD_CreateLabel} 0 5u 100u 10u "Введите свой ник"
Pop $Label

${NSD_CreateText} 0 20u 100% 15u "Сюда ввожу ник"
Pop $Text

${NSD_CreateCheckBox} 0 50u 235 10u "Revolution Crew emulator(рекомендуемый)"
Pop $CheckBox
${NSD_OnClick} $CheckBox Check
${NSD_SetState} $CheckBox 1

${NSD_CreateCheckBox} 0 70u 170 10u "Stryder emulator(для Garena)"
Pop $CheckBox1
${NSD_OnClick} $CheckBox1 Check1
${NSD_SetState} $CheckBox1 0
nsDialogs::Show
FunctionEnd

Function Check
Pop $CheckBox
${NSD_GetState} $CheckBox $1
${If} $1 == 1
${NSD_SetState} $CheckBox1 0
${Else}
${NSD_SetState} $CheckBox1 1
${EndIf}
FunctionEnd

Function Check1
Pop $CheckBox1
${NSD_GetState} $CheckBox1 $1
${If} $1 == 1
${NSD_SetState} $CheckBox 0
${Else}
${NSD_SetState} $CheckBox 1
${EndIf}
FunctionEnd

Function fnCustomDestroy
${NSD_GetText} $Text $Text
${NSD_GetState} $CheckBox $CheckBox
${NSD_GetState} $CheckBox1 $CheckBox1
FunctionEnd

Function Page
StrCmp $Text "Сюда ввожу ник" 0 +3
MessageBox MB_ICONEXCLAMATION "Введите ник!"
Call GotoPage
StrCmp $Text "" 0 +3
MessageBox MB_ICONEXCLAMATION "Введите ник!"
Call GotoPage
FunctionEnd

Function GotoPage ; Функция для произвольного перехода по страницам
StrCpy $R9 -1
IntCmp $R9 0 0 Move Move
StrCmp $R9 "-1" 0 Move ;-1 переход на предыдущую страницу
StrCpy $R9 "120"
Move:
SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd

Section "-Revolution Crew emulator(рекомендуемый)" ;скрываем секцию
StrCmp $CheckBox 1 0 Next
MessageBox MB_ICONINFORMATION|MB_OK "Revolution: отмечено"
SetOutPath "$INSTDIR"
;File /r E:\stryder\*.*
WriteIniStr "$INSTDIR\rev.ini" steamclient PlayerName $Text
Next:
SectionEnd

Section "Секция"
SectionEnd

Section "-Stryder emulator(для Garena)" ;скрываем секцию
StrCmp $CheckBox1 1 0 Next
MessageBox MB_ICONINFORMATION|MB_OK "Stryder: отмечено"
SetOutPath "$INSTDIR"
;File /r E:\revcrew\*.*
WriteIniStr "$INSTDIR\stryder.ini" steamclient PlayerName $Text
Next:
SectionEnd
Зависимость выбора сделал через CheckBox, хотя для этого есть RadioButton
Реализована корректность ввода ника.

asetin_9207
30-08-2010, 10:37
Конечно спасибо вам за предоставленный скрипт, но на моей странице появился баг со 2 секцией: http://rghost.ru/2481490.view
После создания такой собственной страницы потерялся выбор компонентов: http://rghost.ru/2481501.view
Теперь пользователь при установке их не сможет прочесть про эмуляторы, про их описание, а то как-то делятся компоненты. Эмуляторы тут, а все остальное здесь.
Тем более при отключении секции на странице компонентов теряются остальные файлы установки этих 2-х секции. Ведь там не только же задействованы файлы stryder.ini и rev.ini, но и в каждой секции есть еще по несколько файлов.

Секции "Stryder emulator(для Garena)" и "Revolution Crew emulator(рекомендуемый) скрываем. »
Нужно чтобы было на одной странице.

Никак нельзя реализовать секции на странице выбора компонентов? Или хотя бы показать и дать им возможность выбора, но уже на странице "ввода ника" нельзя было снять галочку с выбранной секции на предыдущей странице? (странице выбора компонентов).

Допустим, я запустил установщик, прошла страница приветствия, потом вышла страница выбора компонентов, я выбрал один из нужных мне эмуляторов, далее страница ввода ника, на которой уже стоит галочка (и ее нельзя снять) выбранной мной эмулятора на предыдущей странице. Может так удастся избежать бага?

kotkovets
30-08-2010, 11:28
моей странице появился баг со 2 секцией »
${NSD_CreateCheckBox} 0 50u 235 10u "Revolution Crew emulator(рекомендуемый)"
"Длина" контрола "жирным" выставь подходящие значение.
при установке их не сможет прочесть про эмуляторы, про их описание, »
${NSD_CreateLabel} - в зап-ло воспользоваться на своей стр? под каждым чебоксом сделать описание?
Тем более при отключении секции на странице компонентов теряются остальные файлы установки этих 2-х секции. Ведь там не только же задействованы файлы stryder.ini и rev.ini, но и в каждой секции есть еще по несколько файлов »
Но так вынеси Секции "Stryder emulator(для Garena)" и "Revolution Crew emulator" из группы
удали эту функцию
Function .onSelChange
FunctionEnd
ВЫБОР ЭТИХ СеКциЙ ДЕЛАЕТСЯ УЖЕ НА ОДНОЙ СТРАНИЦЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ИЛИ ПО АРАБСКИ НАПИСАТЬ??????????????

asetin_9207
30-08-2010, 11:33
ВЫБОР ЭТИХ СеКциЙ ДЕЛАЕТСЯ УЖЕ НА ОДНОЙ СТРАНИЦЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ИЛИ ПО АРАБСКИ НАПИСАТЬ?????????????? »
Надо чтобы было все на странице компонентов и выбор, и секции все, и описание. А на странице выбора ника всего лишь вводимый текст. Неужели скрипт будет не работать?! Вон кляпают другие же такие установщики, где выбираешь, а потом вводишь ник. Почему нельзя так? Почему надо секции переносить на стр ввода ника? Неужели нельзя все осуществлять на странице выбора компонентов?!

kotkovets
30-08-2010, 11:57
Почему надо секции переносить на стр ввода ника? »
Потому что, .onSelChange работает только тогда, когда вы измените состояние секций, тобишь идентификаторы (${secStryder} и ${secRevcrew}) секций искаженно "перенесутся" на страницу выбора ника.
если вы ничего не изменили на стр. компонетов:
${secStryder}=1 1=запись stryder.ini
${secRevcrew}=1 1=запись rev.ini
Что неправильно!
а нужно
${secStryder}=1 1=запись stryder.ini
${secRevcrew}=0 0=не зап. rev.ini
или
${secStryder}=0 0=не зап. stryder.ini
${secRevcrew}=1 1=запись rev.ini
Всё из этого!
Если у вас есть другой механизм обработки идентификаторов секций, то оглашайте!

asetin_9207
30-08-2010, 12:07
То есть вы говорите о том, что когда используешь идентификаторы ${secStryder} и ${secRevcrew} они идут для правильного выбора компонентов (1 их 2-х предложеных).
А для описания не можете найти другой индефикатор?
Для описани можно использовать - ID_1, ID_2 и тд.
То есть ${secStryder} и ${secRevcrew} будут для корректного выбора секции (1 из 2-х) и устанавливаемых файлов stryder.ini и rev.ini.

kotkovets
30-08-2010, 12:14
То есть вы говорите о том, что когда используешь идентификаторы ${secStryder} и ${secRevcrew} они идут для правильного выбора компонентов (1 их 2-х предложеных) »
ДА

asetin_9207
30-08-2010, 12:17
Ну вот для выбора и записи используем - ${secStryder} и ${secRevcrew}
А для описания - ID_1, ID_2

kotkovets
30-08-2010, 12:17
А для описания не можете найти другой индефикатор? »
ВЫ сами выбираете "название" идентификаторов! суть то не изменится!
Состояние секций снимается (отмечена или нет) командой:
SectionGetFlags ${ID} $1
Состояние секции записывается в переменную $1
$1=1 - секция отмечена
$1=0 - секция не отмечена
Затем сравнение:
StrCmp $1 1 0 +2
$1=1, то запись и наоборот

asetin_9207
30-08-2010, 12:18
ВЫ сами выбираете "название" идентификаторов! суть то не изменится! »
Почему не изменится?
Ведь для описание использем другой идентификатор, а для выбора и записи - другой.

Скажите мне - почему нельзя реализовать выбор секции и запись в файлах на одно общей странице - выбор компонентов? В чем причина?

kotkovets
30-08-2010, 12:30
Почему не изменится?
Ведь для описание использем другой идентификатор, а для выбора и записи - другой »
Один и тот же. посмотрите скрипт свой!
!insertmacro MUI_DESCRIPTION_TEXT ${secRevcrew} $(DESC_REVCREW)

asetin_9207
30-08-2010, 12:35
А если добавим такой же код, но уже с дргим идентификатором?

kotkovets
30-08-2010, 12:47
как вариант, для создания своих страниц есть в NSIS модуль InstallOptions
Смотри описание в C:\Program Files\NSIS\Docs\InstallOptions\Readme.html
Примеры: C:\Program Files\NSIS\Examples\InstallOptions\
Там корректно снимается состояние секций, в группе не тестировал!
Смотри пример (http://forum.oszone.net/post-1474706-593.html)




© OSzone.net 2001-2012