Показать полную графическую версию : [архив].: NSIS - все вопросы :.
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
Подскажите, пожалуйста, как решить такую задачку
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"'
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. В принципе так и должно быть в нормальной программе.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC