Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Если я пишу в скрипте:
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#]. »
врятли, не напишите вы полноценного плага на бейсике, на шарпе еще можно, но лучше и удобно на си,
изучите си на примерах, я уверяю вы сами переведете, хотя врядли посчитаете это нужным :)
А у Артёма просто нельзя убрать галочку с независящей секции пока не поставишь галочку на секции в группе »
У Артёма теперь можно :)
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
Vincent7, это Ваш инсталлятор или чужой?
kotkovets
16-06-2012, 11:43
как создать вот такую страницу »
в теме масса примеров создания своих страниц + справочник, где описаны те или иные контролы.
это Ваш инсталлятор или чужой? »
чужой и так понятно
Друзья, подскажите, как сделать CheckBox или RadioButton неактивными? В теме пишут, что примеры уже были, но найти не могу...
kotkovets
16-06-2012, 12:24
как сделать CheckBox или RadioButton неактивными? »
EnableWindow [xэндл контрола] 0
Vincent7
16-06-2012, 13:04
Да, инсталлятор не мой, но я хочу сделать подобный. kotkovets, у меня пока отключен интернет, пишу с мобильника, и искать примеры среди 278 страниц с него довольно сложно. Подскажите хотябы на каких страницах примеры. Еще вопрос - если есть плагин, но нет описания для него, можно узнать как им пользоватся?
Еще ткните носом, в справочнике тоже не нашел - можно ли на 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC