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

diakov
10-03-2012, 17:30
kotkovets, как в MUI2.nsh реализовать такое


Function WelcomePageSetupLinkPre
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Type" Button # тип
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Text" "Краткая информация об этом скрипте"
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "State" "$EXEDIR\checks.bmp"
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Left" 120 # отступ слева!
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Right" 300 # длина вправо! 268
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Top" 125 # отступ от верха!
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 4" "Bottom" 146 # высота строки! 143
FunctionEnd

kotkovets
10-03-2012, 20:15
kotkovets, как в MUI2.nsh реализовать такое »
!include "MUI2.nsh"
outfile file.exe
page custom pagevelcom
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

var dlg
var btn

Function pagevelcom
nsDialogs::create 1018
pop $dlg
${NSD_CreateButton} 120u 120u 180u 20u "Краткая информация об этом скрипте"
pop $btn
${NSD_OnClick} $btn ClickButton
nsDialogs::show
FunctionEnd

Function ClickButton
pop $btn
ExecShell open "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp"
FunctionEnd

Section
SectionEnd

wolkow70
11-03-2012, 18:41
Уважаемый kotkovets, не подскажите в чем может быть загвоздка:

В сборке XnView регистрирую библиотеку:

${If} ${RunningX64}
ExecWait 'regsvr32 /s "$INSTDIR\ShellEx\XnViewShellExt64.dll"'
${Else}
ExecWait 'regsvr32 /s "$INSTDIR\ShellEx\XnViewShellExt.dll"'
${EndIf}

На 32-битной системе контексное меню появляется сразу, а на 64-битной системе появляется после перезагрузки. Хотя в RegDllView видно, что библиотека зарегистрировалась. Подозреваю, что так не должно быть.

Еще прошу помочь в решении проблемки описанной в посте
http://forum.oszone.net/post-1876024-2401.html

Gnast
11-03-2012, 19:31
Подскажите, пожалуйста, как решить такую задачку
http://forum.oszone.net/post-1873540-2380.html

Буду рад ссылкам, где можно найти подробное описание как работать со статусами флажков в NSIS

kotkovets
11-03-2012, 20:11
Gnast, рисуйте лучше через nsDialogs (MUI2.nsh),
подобных примеров в этой теме я очень много приводил.
справки есть здесь и на офф. сайте.
На 32-битной системе контексное меню появляется сразу, а на 64-битной системе появляется после перезагрузки. Хотя в RegDllView видно, что библиотека зарегистрировалась. Подозреваю, что так не должно быть. »
у меня все сразу появляется
Еще прошу помочь в решении проблемки описанной в посте
http://forum.oszone.net/post-1876024-2401.html »
вы пробуйте сначала добавлять без нсис,
смотрите еще макросы в х64.nsh -DisableX64FSRedirection и EnableX64FSRedirection

wolkow70
12-03-2012, 09:28
вы пробуйте сначала добавлять без нсис »
Простой запуск рег-файла на живой системе вносит данные куда нужно.смотрите еще макросы в х64.nsh -DisableX64FSRedirection и EnableX64FSRedirection »

так не работает:

${If} ${RunningX64}
${EnableX64FSRedirection}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
${DisableX64FSRedirection}
${Else}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
${EndIf}

Данные вносятся в HKLM32

kotkovets
12-03-2012, 12:14
так не работает: »
Я затрудняюсь ответить:
${If} ${RunningX64}
${EnableX64FSRedirection}
MessageBox MB_OK "Enable) $windir\regedit.exe"
${DisableX64FSRedirection}
MessageBox MB_OK "Disable) $windir\regedit.exe"
${EndIf}
А еще меня терзают смутные сомнения, что при таком способе добавления рег.данных,
процесс установщика должен быть 64-разрядным, что по сути невозможно, установщика процесс всегда - 32.
Кстати пробуйте плагом Registry

wolkow70
12-03-2012, 14:31
Я затрудняюсь ответить: »

Попробовал так:

${If} ${RunningX64}
${EnableX64FSRedirection}
MessageBox MB_OK "Enable) $windir\regedit.exe"
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
${DisableX64FSRedirection}
MessageBox MB_OK "Disable) $windir\regedit.exe"
${Else}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
${EndIf}

В обоих сообщениях было WINDOWS\regedit.exe

Кстати пробуйте плагом Registry »
Это не понял как...

kotkovets
12-03-2012, 15:11
wolkow70, ну быстрей соображайте, какой это путь и че вы указываете:
1.X:\Windows\SysWOW64\regedit.exe
2. X:\Windows\regedit.exe

wolkow70
12-03-2012, 15:15
ну быстрей соображайте, какой это путь и че вы указываете:

1.X:\Windows\SysWOW64\regedit.exe - путь к regedit.exe -x64
2. X:\Windows\regedit.exe - путь к regedit.exe -x32
»

ну быстрей соображайте, какой это путь и че вы указываете:
1.X:\Windows\SysWOW64\regedit.exe
2. X:\Windows\regedit.exe »


1.X:\Windows\SysWOW64\regedit.exe - путь к regedit.exe -x64
2. X:\Windows\regedit.exe - путь к regedit.exe -x32

kotkovets
12-03-2012, 15:31
wolkow70,
X:\Windows\SysWOW64\regedit.exe - это же $SYSDIR\regedit.exe c редиректом в x64 ${EnableX64FSRedirection} :)

wolkow70
12-03-2012, 15:45
Что-то я запутался совсем.

Так не работает.
execwait '$windir\SysWOW64\regedit.exe /s "$EXEDIR\reg.reg"'

Так не работает.
${EnableX64FSRedirection}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'

Получается, что нужно так?
${EnableX64FSRedirection}
execwait '$windir\SysWOW64\regedit.exe /s "$EXEDIR\reg.reg"'

Lisabon
12-03-2012, 21:08
wolkow70,


!include "MUI2.nsh"
!include "x64.nsh"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile Test.exe
ShowInstDetails show

Section
${If} ${RunningX64}
; в 32-х битный реестр
${EnableX64FSRedirection}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
MessageBox MB_OK "Enable) $windir\regedit.exe"
; в 64-х битный реестр
${DisableX64FSRedirection}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
MessageBox MB_OK "Disable) $windir\regedit.exe"
${EndIf}
SectionEnd

wolkow70
13-03-2012, 11:09
Section
${If} ${RunningX64}
; в 32-х битный реестр
${EnableX64FSRedirection}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
MessageBox MB_OK "Enable) $windir\regedit.exe"
; в 64-х битный реестр
${DisableX64FSRedirection}
execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"'
MessageBox MB_OK "Disable) $windir\regedit.exe"
${EndIf}
SectionEnd »

Да, так работает. Мне нужно было поменять местами ${EnableX64FSRedirection} и ${DisableX64FSRedirection}. Я исходил из разрядности установщика и думал, что EnableX64FSRedirection подключает 64-битный реестр. Оказалось, что наоборот и исходить нужно было из разрядности системы. Всем спасибо.

wolkow70
18-03-2012, 10:24
kotkovets, добрый день.

Пытаюсь разобраться в вопросе определения ключей реестра

Нашел в справке вот что:

${If} ${KeyExists} "${HKCU}\Software\7-zip"
# здесь выполняются команды, если ключ существует
DetailPrint "Ключ есть!"
${Else}
# здесь выполняются команды, если ключа не существует
DetailPrint "Ключа не существует!"
${EndIf}

Но это не вовсем то, что требуется.

Пытаюсь сделать обновленный более гибкий макрос файловых ассоциаций

Алгоритм нужен такой:

1. Если существует ключ;
2. И если не присвоено значение по умолчанию;
3. Или значение имеет нулевую длину
- то переход бо безусловной метке.
Иначе выполняются комманды бэкапа и перезаписи асооциаций.

У самого получилось пока вот что:

!macro RegisterExtension extenstion
Push $1
Push $2
;
StrCpy $ClassName "Winamp.File.${extenstion}"
;
ReadRegStr $1 HKCU "Software\Classes\.${extenstion}" "" ; Читаем сначала в HKCU
StrCmp "$1" "" NoAssocHKCU ;если значение по умолчанию не присвоено не пишем ассоциацию в HKCU
StrCmp "$1" "$ClassName" NoBackupHKCU ;если совпадает тип файла не бэкапим
WriteRegStr HKCU "Software\Classes\.${extenstion}" "Winamp_Back" "$1" ;иначе бэкапим

NoBackupHKCU:

WriteRegStr HKCU "Software\Classes\.${extenstion}" "" "$ClassName" ;пишем ассоциацию

NoAssocHKCU:
;
ReadRegStr $1 HKCU "Software\Classes\.${extenstion}" "" ; заново читаем значение в HKCU
StrCmp "$1" "$ClassName" NoAssocHKLM ;если применена ассоциация в HKCU пропускаем переход в HKLM
;
DeleteRegValue HKCU "Software\Classes\.${extenstion}" "" ; удаляем значение пустого ключа в HKCU на случай нулевой длины (бывает например в ключах созданных AIMP)
;
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "" ;читаем значение в HKLM
StrCmp "$2" "" NoBackupHKLM ;если нет значения по умолчанию не бэкапим
StrCmp "$2" "$ClassName" NoBackupHKLM ;если тип совпадает - не бэкапим
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" "$2" ;иначе бэкапим

NoBackupHKLM:

WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$ClassName" ;пишем ассоциацию

NoAssocHKLM:

Pop $1
Pop $2
!macroend

Тут смысл повторить логику внесения асооциаций оригинального Winamp. Если есть значение по умолчанию в HKCU , то ассоциация пишется и бэкапится в HKCU, если ассоциация в HKCU не прописана, то вносится и бэкапится в HKLM. В принципе так и должно быть в нормальной программе.

diakov
19-03-2012, 17:37
kotkovets, а как включить orange.bmp в сам exe шник что бы на другом компе работало



!include "MUI2.nsh"
outfile file.exe
page custom pagevelcom
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

var dlg
var btn

Function pagevelcom
nsDialogs::create 1018
pop $dlg
${NSD_CreateButton} 120u 120u 180u 20u "Краткая информация об этом скрипте"
pop $btn
${NSD_OnClick} $btn ClickButton
nsDialogs::show
FunctionEnd

Function ClickButton
pop $btn
ExecShell open "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp"
FunctionEnd

Section
SectionEnd

kotkovets
19-03-2012, 21:12
что бы на другом компе работало »
Function ClickButton
pop $btn
InitPluginsDir
File "/oname=$PLUGINSDIR\image.bmp" "Абсолютный(относительный)_путь_к_картинке\***.bmp"
ExecShell open "$PLUGINSDIR\image.bmp"
FunctionEnd

Olef2387
22-03-2012, 15:41
Здравствуйте.
Подскажите, Как в нсис убрать кнопку "детали" при установке?

kotkovets
22-03-2012, 15:46
Подскажите, Как в нсис убрать кнопку "детали" при установке? »
4.8.1.34 ShowInstDetails
hide|show|nevershow
---
В начале скрипта вне секции или функции:
ShowInstDetails nevershow

Olef2387
22-03-2012, 15:54
kotkovets. Вот это оперативность. Огромное спасибо.




© OSzone.net 2001-2012