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.
30-06-2012, 06:42
у sectiongetsize идентификаторы $1-8 »
Это называют переменными

а как тогда поставить идентификаторы к getflags? »
Подставляйте с $R0 по $R9
К тому же, прочитайте справку, вопрос довольно глупый, если вы не умеете работать с переменными....

Vincent7
30-06-2012, 18:21
K.A.V., ну да тоесть переменными, извиняюсь перепутал. теперь getsize $1-8, get3lags $R1-8, strcmp и strcpy тоже по аналогии сделал, но как это все сложить в oninit?

K.A.V.
30-06-2012, 21:36
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}

dix75
04-07-2012, 13:24
Как определить есть ли в указанной дирректории вложенные дирректории?

kotkovets
04-07-2012, 13:52
Как определить есть ли в указанной дирректории вложенные дирректории? »
С какой целью, и если папка не пуста?

dix75
04-07-2012, 13:59
Цель есть или нет вложенные папки пустые или нет мне неважно

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 "В папке что-то есть, не важно что..."

dix75
04-07-2012, 14:42
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