Показать полную графическую версию : [архив].: NSIS - все вопросы :.
о! спасибо. надеюсь вот это http://nsis.sourceforge.net/NsisIIS_plug-in поможет.
Для определеничя установленного приложения по наличию ключа в реестре (если ключа нет - уст vc.exe , если есть - продолжается установка) делаю так, как и советовали :
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" ""
StrCmp $1 "" 0 Next
SetOutPath "$TEMP"
File "vc.exe"
ExecWait "$TEMP\vc.exe"
Delete "$TEMP\vc.exe"
Next:
Это ключ в реестре есть, но vc.exe всё равно запускается, не обращая на его наличие внимания... Почему ?
kotkovets
06-10-2010, 14:53
MKN
Ну вы же читаете, значение ключа в реестре, по умолчанию, а значение пустое! соответственно $1=""
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" ""
Вот так будет лучше:
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" "DisplayName"
IfErrors 0 Next
....
В переменной $1 будет значение ключа DisplayName реестра, если VC установлен.
Советую вам для отладки скриптов пользоваться messagebox
Совет для тех у кого название программы слишком длинное и не умещается на странице приветствия:
по умолчанию размер метки соствляет 28u, что примерно 2 с половиной строки. Естественно если название должно выводится на трех строчках, то оно не влезает. Это решается добавление в коде константы MUI_WELCOMEPAGE_TITLE_3LINES и тогда высота метки будет составлять 38u, что вполне достаточно для вывода трех строк.
пример:
...
!define MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_PAGE_WELCOME ;страничка привествия
...
А вот что необходимо сделать пользователям у которых не вмещается и на три строки:
открываем файл C:\Program Files\NSIS\Contrib\Modern UI 2\Pages\Welcome.nsh (C:\Program Files\NSIS - папка куда установлен NSIS, у Вас может отличаться) предварительно сделав копию этого файла.
Находим 80-82 строки со следующим содержанием
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TEXT
и дописываем после них
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_CUSTOM_HEIGHT
далее ищем строки 138-142 со следующим содержанием
;Title
!ifndef MUI_WELCOMEPAGE_TITLE_3LINES
!define MUI_WELCOMEPAGE_TITLE_HEIGHT 28
!else
!define MUI_WELCOMEPAGE_TITLE_HEIGHT 38
!endif
и заменяем их следующим кодом:
;Title ;12u - высота одной строки
!ifndef MUI_WELCOMEPAGE_TITLE_3LINES
!ifdef MUI_WELCOMEPAGE_TITLE_CUSTOM_HEIGHT
!define MUI_WELCOMEPAGE_TITLE_HEIGHT ${MUI_WELCOMEPAGE_TITLE_CUSTOM_HEIGHT}
!else
!define MUI_WELCOMEPAGE_TITLE_HEIGHT 28
!endif
!else
!define MUI_WELCOMEPAGE_TITLE_HEIGHT 38
!endif
при этом сохраняется полная совместимость со старым скриптом.
а вот пример использования если название умещается аж на пять строк:
!define MUI_WELCOMEPAGE_TITLE_CUSTOM_HEIGHT 60 ;12u - высота одной строки
!insertmacro MUI_PAGE_WELCOME ;страничка привествия
Надеюсь кому-нибудь поможет.
kotkovets,
Подскажи, если перед установкой необходима проверка наличия нескольких процессов, запущенной службы и нескольких установленных приложений (с запуском их установки в случае отсутствия), то каким образом в Function .onInit правильно организовать их последовательное выполнение ?
Поместить в скрипте друг за другом в пределах этой секции ?
И как быть в аналогичном случае с закрытием процессов, остановкой службы перед деинсталляцией ?
И почему при наличии !define BRANDING "Текст" - на страницах "брэнд" не отображается ?
kotkovets
06-10-2010, 15:57
И почему при наличии !define BRANDING "Текст" - на страницах "брэнд" не отображается ? »
В констакту BRANDING помещаем значение "Текст"
!define BRANDING "Текст" ;
BrandingText "${BRANDING}"
перед установкой необходима проверка »
Function .OnInit
;команда1
;команда2
FunctionEnd
Строки скрипта выполняются последовательно,сначала команда1, команда2 и т.д
перед деинсталляцией аналогично »
Function un.OnInit
FunctionEnd
Ну вы же читаете, значение ключа в реестре, по умолчанию, а значение пустое! »
А разве нельзя делать определение наличия только ключа ? Без "содержимого". Этого вполне достаточно.
Если ключ существует, то - результат. Если не существует - результат. (Собственно я так всегда и делал в Setup Factory)
kotkovets
07-10-2010, 10:42
А разве нельзя делать определение наличия только ключа ? Без "содержимого" »
Можно. В скрипте реализован цикл, на поиск ключа в реестре, находим ключ- продолжаем установку, не находит - устанавливаем VC и продолжаем установку.
Section
StrCpy $0 0
loop:
EnumRegKey $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $0
StrCmp $1 "" Done
StrCmp $1 "{CB2F7EDD-9D1F-43C1-90FC-4F52EAE172A1}" 0 +3
StrCpy $0 1
Goto Done
IntOp $0 $0 + 1
Goto Loop
Done:
StrCmp $0 1 Next
;здесь пишем код если VC не установлен
Next:
SectionEnd
kotkovets,
Возможны ли в NSIS действия с элементами окон (как в AutuIT) ? Или может есть какие либо хитрости для такой реализации ?
kotkovets
07-10-2010, 15:32
Возможны ли в NSIS действия с элементами окон (как в AutuIT) ? »
Конкретно, что ты имеешь в виду?
поковыряй WinMessages.nsh и команды FindWindow , SendMessage и т.д
Вплотную этим не занимался пока... :)
Закрытие всех окон IE (http://nsis.narod.ru/examples/closing_all_internet_explorer_windows.html)
Конкретно, что ты имеешь в виду? »
Фокус и переходы по контролам, нажатие кнопок, копирование-вставка в разные поля и т.п.
Вопрос: как сделать неактивной или совсем убрать кнопку "Show Details" при инсталляции ?
И возможно ли вообще убрать неактивные кнопки "Back" и "Cancel" на финишных страницах ?
возможно.... вот тебе функция которая блокирует кнопку назад (например может пригодиться на кастомных страницах)...
Function DisableBackButton
GetDlgItem $R1 $HWNDPARENT 3
; FindWindow $R1 "Button" "< &Назад" $HWNDPARENT
EnableWindow $R1 0
FunctionEnd
EnableWindow можно потом заменить на что-нибудь "посущественнее"... ведь хендл кнопки то у нас есть
======
а вот еще одна интересная функция.. может кому нибудь и пригодится.. не знаю выкладывали ли ее здесь ранее..
Function RelGotoPage ; Функция для произвольного перехода по страницам
; Вызывать след образом:
; StrCpy $R9 X ; где Х - относительный номер страницы (например: -1 переход на одну назад, 1 - на одну вперед)
; Call RelGotoPage
IntCmp $R9 0 0 Move Move
StrCmp $R9 "X" 0 Move
StrCpy $R9 "120"
Move:
SendMessage $HWNDPARENT "0x408" "$R9" ""
FunctionEnd
kotkovets
07-10-2010, 18:46
Вопрос: как сделать неактивной или совсем убрать кнопку "Show Details" при инсталляции ? »
Из справки:
ShowInstDetails
hide|show|nevershow
==========================================
ShowInstDetails hide - показываем кнопку и скрываем окно деталей
ShowInstDetails nevershow -скрываем все
ShowInstDetails show - показываем окно деталей без кнопки
==========================================
При деинсталляции:
ShowUninstDetails
при наличии в скрипте функции
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit
Function MyGUIInit
и т.д. как в справке
раскрашивается почему то текст страницы выбора компонентов, а не страницы приветсвия, как было задумано...
И возможно ли изменить фон страницы приветствия (без скин-плагинов) ?
MKN, к твоему вопросу по картинке:
попробуй так:
; записываем картинки в окно установщика
!define MUI_HEADERIMAGE ; - возможность запихнуть в заголовок рисунок
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp" ; - сам рисунок в заголовке
; !define MUI_HEADERIMAGE_RIGHT ; - рисунок в заголовке будет находиться справа
mshak,
Благодарю. Но я уже разобрался и удалил свой вопрос...
У меня не было !define MUI_HEADERIMAGE
А как изменить значок в полосе шапки окна ( рядом с "Установка и т.д." ) ?
!define MUI_ICON "Install.ico" ; - иконка на файл установщика
!define MUI_UNICON "UnInstall.ico" ; - иконка на файл установщика
Подскажите пожалуйста, каким образом "отвязать" текст от правого края поля страницы приветствия
!define MUI_WELCOMEPAGE_TITLE "${PRODUCT_NAME} ${PRODUCT_VERSION}"
расположив PRODUCT_NAME и PRODUCT_VERSION по центру ?
kotkovets
08-10-2010, 15:46
И возможно ли изменить фон страницы приветствия (без скин-плагинов) ? »
Открываем файл ${NSISDIR}\Contrib\Modern UI 2\MUI2.nsh и заменяем строку
!include "Pages\Welcome.nsh" на !include "Pages\Welcome_1.nsh" сохраняем
изменения в файл MUI_2.nsh
Открываем файл ${NSISDIR}\Contrib\Modern UI 2\Pages\Welcome.nsh и заменяем все константы ${MUI_BGCOLOR} на 0xFFFF80 (здесь цвет желтый) и сохраняем изменения в файл Welcome_1.nsh.
Подключаем измененый интерфейс Modern:
!include "${NSISDIR}\Contrib\Modern UI 2\MUI_2.nsh"
Все эти манипуляции нужны для того, что бы фон стартовой страницы не распространялся на все скрипты!
kotkovets,
Есть ли какой либо приём, для регистрации одной командой всех DLL, находящихся в папке ?
К примеру, есть у меня папка с полсотней библиотек, требующих регистрации. Неужели каждую в отдельности прописывать ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC