Показать полную графическую версию : [архив].: NSIS - все вопросы :.
у sectiongetsize идентификаторы $1-8 »
Это называют переменными
а как тогда поставить идентификаторы к getflags? »
Подставляйте с $R0 по $R9
К тому же, прочитайте справку, вопрос довольно глупый, если вы не умеете работать с переменными....
Vincent7
30-06-2012, 18:21
K.A.V., ну да тоесть переменными, извиняюсь перепутал. теперь getsize $1-8, get3lags $R1-8, strcmp и strcpy тоже по аналогии сделал, но как это все сложить в oninit?
Vincent7, ну раз вы смогли всё сложить, почитайте ещё раз наш русскоязычный справочник по NSIS, а именно страничку "Логические конструкции", а потом попытайтесь их применить в вашем скрипте, если всё равно не получится, покажите результат того, чего вы написали
wolkow70
02-07-2012, 11:53
kotkovets,
Что-то не работает с RegistryFunc.nsh такая конструкция:
${IfNot} ${KeyExists} "${HKCU}\Software\Classes\.${extenstion}"
${AndIfNot} ${KeyExists} "${HKLM}\SOFTWARE\Classes\.${extenstion}"
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "UniExtract"
${EndIf}
Сделал так, работает:
${If} ${KeyExists} "${HKCU}\Software\Classes\.${extenstion}"
${ElseIf} ${KeyExists} "${HKLM}\SOFTWARE\Classes\.${extenstion}"
${Else}
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "UniExtract"
${EndIf}
Как определить есть ли в указанной дирректории вложенные дирректории?
kotkovets
04-07-2012, 13:52
Как определить есть ли в указанной дирректории вложенные дирректории? »
С какой целью, и если папка не пуста?
Цель есть или нет вложенные папки пустые или нет мне неважно
kotkovets
04-07-2012, 14:10
Цель есть или нет вложенные папки пустые или нет мне неважно »
System::Call "Shlwapi::PathIsDirectoryEmpty(t'путь к папке')i.R0"
StrCmp $R0 1 0 +2
MessageBox MB_OK "Папка пуста"
StrCmp $R0 0 0 +2
MessageBox MB_OK "В папке что-то есть, не важно что..."
kotkovets, Спасибо
но мне нужно чтобы в папке небыло папок а файлы могут быть
Точнее задача:
Если в папке есть другие(вложенные) папки то удалять папку нельзя, в противном случаи удалить эту папку и все имеющиеся в ней файлы
kotkovets
04-07-2012, 15:17
но мне нужно чтобы в папке небыло папок а файлы могут быть »
ну можно как-то так
!include "FileFunc.nsh"
!include "LogicLib.nsh"
Function FindEpmty
Intop $R0 $R0 + 1
Push $0
FunctionEnd
Section
StrCpy $R0 0
ClearErrors
${Locate} "путь к папке" "/L=DE" "FindEpmty"
IfErrors 0 +2
StrCpy $R0 -1
${If} $R0 == -1
MessageBox MB_OK "указываемая папка не существует" IDOK
${ElseIf} $R0 == 0
MessageBox MB_OK "В указываемой папке нет вложенных папок или папки не пусты" IDOK
${ElseIf} $R0 > 0
MessageBox MB_OK "В указываемой папке есть пустые вложенные папки(папка)" IDOK
${EndIf}
SectionEnd
В справке читайте - Locate, там все подробнее расписано.
---
зы.
каждая пустая папка увеличивает $R0 на единицу.
wolkow70
04-07-2012, 15:30
Возник вопрос по радиобуттонам:
имею в скрипте:
Var 7ZRBTN
InstType "Сокращенная"
InstType "Полная"
InstType "Минимальная"
SectionGroup "Добавить в контексное меню 7Z-архивов" 7zContext
Section "Все пункты контекстного меню" 7zContextFull
SectionIn 2
!insertmacro RegisterContextMenuFull "7z"
SectionEnd
Section "Только пункт 'Извлечь с помощью UniExtract'" 7zContextMinimal
SectionIn 1
!insertmacro RegisterContextMenuMinimal "7z"
SectionEnd
SectionGroupEnd
Section "Ассоциировать с 7Z-архивами" 7ZAssoc
SectionIn 2
!insertmacro RegisterExtension "7z"
SectionEnd
Function .onSelChange
!insertmacro StartRadioButtons $7ZRBTN
!insertmacro RadioButton ${7ZContextMinimal}
!insertmacro RadioButton ${7ZContextFull}
!insertmacro RadioButton ${7ZAssoc}
!insertmacro EndRadioButtons
FunctionEnd
Function .OnInit
StrCpy $7ZRBTN ${7ZContextMinimal}
FunctionEnd
Проблема в том, что с чебоксами секций самого радиобутона все нормально. Но две секции объеденены в группу, и если поставить галку на чекбоксе самой секции, то отмеченными получаются обе входящие в группу секции.
kotkovets
04-07-2012, 16:00
Проблема в том, что с чебоксами секций самого радиобутона все нормально. Но две секции объеденены в группу, и если поставить галку на чекбоксе самой секции, то отмеченными получаются обе входящие в группу секции. »
уберите, строка лишняя
!insertmacro RadioButton ${7ZAssoc}
wolkow70
04-07-2012, 16:04
уберите, строка лишняя »
В том и дело, что не лишняя. Здесь присутствует взаимоисключающий выбор:
Просто интегрировать в контекстное меню (два варианта - сокращенный и расширенный), или ассоциировать с файлами.
При нажатии 7ZAssoc должны отключаться 7ZContextMinimal и 7ZContextFull. Они и отключаются. Но затем если на чебоксе группы секций 7zContext поставить галочку, то активными становятся обе включенные подсекции, а нужно только 7ZContextMinimal .
kotkovets
04-07-2012, 16:26
wolkow70, читайте с где-то страниц 20 назад там есть решения.
wolkow70
04-07-2012, 16:45
wolkow70, читайте с где-то страниц 20 назад там есть решения. »
Если имеется в виду пост http://forum.oszone.net/post-1915688-2705.html , то я не пойму где в нем решение именно этой задачи.
Это ? SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу ?
kotkovets
04-07-2012, 20:41
SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу ? »
да, достаточно добавить эту команду, но вытекают еще тысячу проблем...
--
ЗЫ.
Поэтому такие вопросы решаю через свои странички: просто и комфортно.
wolkow70
05-07-2012, 11:54
Несложный вопрос.. :)
Кодек DivX.dll на 32-разрядной ОС распаковывается WINDOWS\system32
Пишу SetOutPath "$SYSDIR".
А на 64-битной распаковывается в WINDOWS\SysWOW64. Как тут правильно путь прописать?
kotkovets
05-07-2012, 12:06
А на 64-битной распаковывается в WINDOWS\SysWOW64. Как тут правильно путь прописать? »
в библиотеке x64.nsh все расписано с примерами.
wolkow70
05-07-2012, 13:05
Так сделал.
SetOutPath "$SYSDIR"
;
${If} ${RunningX64}
${EnableX64FSRedirection}
File "${pkgdir}\DivX\DivX.dll"
File "${pkgdir}\DivX\dpl100.dll"
${DisableX64FSRedirection}
${Else}
File "${pkgdir}\DivX\DivX.dll"
File "${pkgdir}\DivX\dpl100.dll"
${EndIf}
wolkow70
05-07-2012, 18:50
kotkovets,
Пока делаю так, (из вашего примера):
${If} ${RunningX64}
SetRegView 64
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\6FA8588DEBF295543BD8D53E676560BE" "A4EAA01E8B89A024DB390E25C0326D42" "$INSTDIR\Nero Burning ROM\NeroExpress.exe"
SetRegView 32
${Else}
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\6FA8588DEBF295543BD8D53E676560BE" "A4EAA01E8B89A024DB390E25C0326D42" "$INSTDIR\Nero Burning ROM\NeroExpress.exe"
${EndIf}
Но куски кода внушительные, не хочется повторять (только одинаковые записи в реестр)
Думаю, как красивее можно сделать? Таким образом нормально?
${If} ${RunningX64}
SetRegView 64
${Else}
SetRegView 32
${EndIf}
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\6FA8588DEBF295543BD8D53E676560BE" "A4EAA01E8B89A024DB390E25C0326D42" "$INSTDIR\Nero Burning ROM\NeroExpress.exe"
SetRegView 32
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC