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.
04-06-2012, 10:25
Если я пишу в скрипте:
SetOutPath "$LOCALAPPDATA\LightAlloy"
File /oname=$LOCALAPPDATA\LightAlloy\LA.xml "${pkgdir}\Light Alloy\LA1.xml" »

Строка с командой SetOutPath лишняя, т.к. данная строка не имеет смысла, если у команды File стоит параметр /oname в котором прописан путь назначения

wolkow70
04-06-2012, 10:58
Строка с командой SetOutPath лишняя, т.к. данная строка не имеет смысла, если у команды File стоит параметр /oname в котором прописан путь назначения »
Вот почему я и задал вопрос.
Получается, что команды идентичны:

File /oname=$LOCALAPPDATA\LightAlloy\LA.xml "${pkgdir}\Light Alloy\LA1.xml"

SetOutPath "$LOCALAPPDATA\LightAlloy"
File /oname=LA.xml "${pkgdir}\Light Alloy\LA1.xml"

И можно написать и так и сяк.

Olef2387
05-06-2012, 00:35
Написал собственный "обработчик", который не даёт отметить несколько секций в группе, но он чисто для вашего скрипта, может кому и пригодится ещё
Возможно, можно будет его каким-то образом усовершенствовать для "универсальности", но пока что нет желания этим заниматься
Вроде бы, работает так как нужно »
Спасибо Вам, Артём, выручили.
А Функция будет на всех системах работать или возможны ошибки?
ещё у меня также есть скрытая секция в скрипте, которая всегда работает и непоказывается в списке компонентов. Она никак не нарушит скрипт?

Ну и ещё по мелочи: если поставить галочку на "Независящей секции", то эта галочка никак не убирается пока не поставишь галочку на одной из секций в группе...

kotkovets
05-06-2012, 00:49
ещё у меня также есть скрытая секция в скрипте, которая всегда работает и непоказывается в списке компонентов. Она никак не нарушит скрипт? »
нет, секция для порядка дожна быть "без идентификатора", как обычно пишут
А Функция будет на всех системах работать или возможны ошибки? »
ну разве тока на WINDOWS аля '98
Ну и ещё по мелочи: если поставить галочку на "Независящей секции", то эта галочка никак не убирается пока не поставишь галочку на одной из секций в группе... »
я вам говорил, что ничего путного дальше, ибо того же эффекта я достигал гораздо проще.

Olef2387
05-06-2012, 01:08
я вам говорил, что ничего путного дальше, ибо того же эффекта я достигал гораздо проще. »
Ну у Вас было так: если поставить галочку на независящей секции - то галочка автоматически ставится и на группе секций, автоматом выбирая первый компонент в группе и после этого уже вообще ничего не сделать с группой секции, на другую секцию в группе галочку не поставишь.

А у Артёма просто нельзя убрать галочку с независящей секции пока не поставишь галочку на секции в группе. Когда поставишь галочку на секции в группе, то галочку с независящей секции уже убрать можно и другую секцию в группе тоже можно выбрать .
з.ы Запутано, но всё так и есть. Наблюдал специально))

john_ylygovich_sora@vk
05-06-2012, 08:50
на бейсике жесткая привязка к платформе .NET - что не гоже, размер библиотеки 13.5 кб!!! Да еще таскать собой CLR.dll ?????????????????? если, честно в топку! куда лучше, гибче в тысячи раз писать на с (с++) - примеров очень много. такой пример на си как минимум 5 кб, т.е ничего лишнего не пихается в код, чем на бейсике.

Ну это я понимаю, но вопрос всё-равно в силе. Может кто сможет перевести [delphi|c++] в [vb .net |c#].
Если проблемы с экспортом функций, то напишите, что экспортировать.

А clr.dll ни кто с собой таскать не будет :)

kotkovets
05-06-2012, 09:16
Ну это я понимаю, но вопрос всё-равно в силе. Может кто сможет перевести [delphi|c++] в [vb .net |c#]. »
врятли, не напишите вы полноценного плага на бейсике, на шарпе еще можно, но лучше и удобно на си,
изучите си на примерах, я уверяю вы сами переведете, хотя врядли посчитаете это нужным :)

K.A.V.
05-06-2012, 11:11
А у Артёма просто нельзя убрать галочку с независящей секции пока не поставишь галочку на секции в группе »
У Артёма теперь можно :)


OutFile "example.exe"

var hInst
var SecID
var SecFlag

!include "MUI2.nsh"
!include "Sections.nsh"

#!insertmacro MUI_PAGE_WELCOME
;функция во время открытия странички компонентов
!define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTS_SHOW
;---------------------------------------------------
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE Russian

;макрос проверки секций, если одна из секций отмечена возврат - 1, иначе - 0;
;в intsec - указываем количество секций в скрипте
!macro CheckSection intsec ret
Push ${intsec}
System::Store SR2
${For} $R0 1 $R2
SectionGetFlags $R0 $R1
${IfThen} $R1 == 1 ${|}${Break}${|}
${Next}
Push $R1
System::Store L
Pop ${ret}
!macroend

Section /o "Независящая секция" FREE
SectionEnd

SubSection /e test IDS_1

Section /o "Компонент №1" ID_1
SectionEnd

Section /o "Компонент №2" ID_2
SectionEnd

Section /o "Компонент №3" ID_3
SectionEnd

Section /o "Компонент №4" ID_4
SectionEnd

Section /o "Компонент №5" ID_5
SectionEnd

Section /o "Компонент №6" ID_6
SectionEnd

SubSectionEnd


Function .onSelChange
call GetSelectedSection
call UnSelectSections

!insertmacro CheckSection 7 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"

SectionGetFlags ${FREE} $R1
StrCmp $R0 "0" 0 end
StrCmp $SecFlag "1" 0 end
StrCmp $R1 "1" 0 +4
SectionSetFlags ${FREE} 0
StrCpy $SecFlag 0
goto +3
SectionSetFlags ${FREE} 1
StrCpy $SecFlag 1
goto end2
end:
StrCpy $SecFlag $R1
end2:
FunctionEnd

Function .OnInit
StrCpy $1 ${ID_1}
SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу
FunctionEnd


Function GetSelectedSection
StrCpy $R0 0
st:
IntOp $R0 $R0 + 1
StrCmp $R0 "1" st 0
StrCmp $R0 "8" end 0
SectionGetFlags $R0 $R1
StrCmp $R0 "$SecID" 0 +2
StrCpy $R1 0
StrCmp $R1 "1" 0 st
StrCpy $SecID "$R0"
end:
FunctionEnd

Function UnSelectSections
StrCpy $R1 0
st2:
IntOp $R1 $R1 + 1
StrCmp $R1 "1" st2 0
SectionSetFlags $R1 0
StrCmp $R1 "7" 0 st2
SectionSetFlags $SecID 1
FunctionEnd


Function COMPONENTS_SHOW
GetDlgItem $hInst $HWNDPARENT 1 ;находим HWND кнопки "установить"
!insertmacro CheckSection 7 $R0
StrCmp $R0 0 0 +2
EnableWindow $hInst ${SW_HIDE} ;отключаем кнопку "установить"
StrCmp $R0 1 0 +2
EnableWindow $hInst ${SW_SHOW} ;включаем кнопку "установить"
FunctionEnd

Vincent7
15-06-2012, 21:21
Приветствую. Нужна помощь, я использую плагин nsis7z для распаковки архивов, можно ли через функцию callback, сделать чтобы при распаковке было вот как на скрине http://upwap.ru/2552952

kotkovets
15-06-2012, 22:19
Приветствую. Нужна помощь, я использую плагин nsis7z для распаковки архивов, можно ли через функцию callback, сделать чтобы при распаковке было вот как на скрине http://upwap.ru/2552952 »
нет, только размер архива и размер на момент распаковки архива, но не названия файлов в архиве.
Plugin now has two additional commands:

Nsis7z::ExtractWithDetails "Test.7z" "Installing package %s..."

Unpacks archive in details mode, with promt generated from second param, use
%s to insert unpack details like "10% (5 / 10 MB)"

GetFunctionAddress $R9 CallbackTest
Nsis7z::ExtractWithCallback "Test.7z" $R9

Unpacks archive in callback mode - plugin will animate progress bar, you can do
anything (like setting user prompt) in callback function
На скрине распаковка никак не относится к плагу, показываются какие файлы распаковываются "из инсталлятора"
достаточно прописать вне функции или секции:
ShowInstDetails show
и убрать компрессию одним блоком, т.е не применять команду в скрипте с флагом - /SOLID
SetCompressor /SOLID LZMA
это увеличивает размер инсталлятора

Vincent7
16-06-2012, 00:22
Ясно. Спасибо за обьяснение. Теперь еще одно, как создать вот такую страницу: http://upwap.ru/2553232

alert30
16-06-2012, 11:34
Vincent7, это Ваш инсталлятор или чужой?

kotkovets
16-06-2012, 11:43
как создать вот такую страницу »
в теме масса примеров создания своих страниц + справочник, где описаны те или иные контролы.
это Ваш инсталлятор или чужой? »
чужой и так понятно

Ivn78
16-06-2012, 12:01
Друзья, подскажите, как сделать CheckBox или RadioButton неактивными? В теме пишут, что примеры уже были, но найти не могу...

kotkovets
16-06-2012, 12:24
как сделать CheckBox или RadioButton неактивными? »
EnableWindow [xэндл контрола] 0

Vincent7
16-06-2012, 13:04
Да, инсталлятор не мой, но я хочу сделать подобный. kotkovets, у меня пока отключен интернет, пишу с мобильника, и искать примеры среди 278 страниц с него довольно сложно. Подскажите хотябы на каких страницах примеры. Еще вопрос - если есть плагин, но нет описания для него, можно узнать как им пользоватся?

Ivn78
16-06-2012, 13:39
Еще ткните носом, в справочнике тоже не нашел - можно ли на MUI_PAGE_FINISH скрыть (сделать неактивной) кнопку "Назад"?
Проблема в том, что перед финишной страницей помещена пользовательская

wolkow70
16-06-2012, 14:38
kotkovets,
Подскажите плиз как проще сделать ?

Function .OnInit
${If} ${RunningX64}
StrCpy $INSTDIR "$PROGRAMFILES64\WinRAR"
${Else}
StrCpy $INSTDIR "$PROGRAMFILES\WinRAR"
${EndIf}
FunctionEnd

Section "!${PRODUCT_NAME}" Install
SectionIn RO
;
${If} $GMODE = 0
${AndIf} ${Silent}
${AndIf} ${FileExists} "$INIFILE"
ClearErrors
ReadINIStr "$R0" "$INIFILE" "DIRECTORY" "INSTALLDIR"
${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1
${WordReplace} $R1 "%windir%" "$WINDIR" "+" $R0
${WordReplace} $R0 "%appdata%" "$APPDATA" "+" $R1
${WordReplace} $R1 "%systemdrive%" "$SysDrive" "+" $R0
StrCpy $INSTDIR $R0
${EndIf}
;
${If} $GMODE = 0
;
SetOutPath "$INSTDIR"

тут распаковка

${EndIf}
SectionEnd

При установке в силент- режиме на ОС x64 распаковка идет все равно в программную папку x86.

kotkovets
16-06-2012, 16:26
можно ли на MUI_PAGE_FINISH скрыть (сделать неактивной) кнопку "Назад"?
Проблема в том, что перед финишной страницей помещена пользовательская »

;---
;---
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FINISH_SHOW
!insertmacro MUI_PAGE_FINISH
;---
;---
!insertmacro MUI_LANGUAGE "English"

Function FINISH_SHOW
GetDlgItem $0 $HWNDPARENT 3
EnableWindow $0 0
FunctionEnd
kotkovets,
Подскажите плиз »
почему условие не выполняется в тихом режиме ищите в скрипте

;---
;---
Function .OnInit
StrCpy $INSTDIR "$PROGRAMFILES64"
FunctionEnd

Section
SectionIn RO
SetOutPath "$INSTDIR"
MessageBox MB_ICONINFORMATION|MB_OK "$INSTDIR" IDOK
SectionEnd

wolkow70
16-06-2012, 16:41
почему условие не выполняется в тихом режиме ищите в скрипте »

Подозреваю, что из-за этого:
${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1




© OSzone.net 2001-2012