Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
K.A.V., спасибо за ответ!
После удаления строки скрипт скомпилировался без ошибок.
Также у меня возник вопрос по другому примеру из справки: "Кликабельный BrandingText".
Возможно что-то неправильно делаю, но сделать брендинг-текст в виде ссылки у меня не получается, ресурс интерфейса подправил как указано в примере. Возможно плагин Linker не работает с 3-й версией NSIS? Если Вас не затруднит, проверьте, пожалуйста работоспособность кода из примера на NSIS 3b0.
P.S есть, конечно, аналогичный плагин - BrandingURL, но результат его работы мне не очень нравится, т.к кликабельность ссылки получается на всю нижнюю площадь инсталлятора, а не только в области самой ссылки.
Если Вас не затруднит, проверьте, пожалуйста работоспособность кода из примера на NSIS 3b0. »
Все прекрасно работает, проблем нет. Проверил как ANSI версию, так и UNICODE. Скорее всего, вы что-то делаете (или сделали) неправильно.
Flix, спасибо. Не могли бы в таком случае выложить ваш правленный modern.exe?
Уважаемые, подскажите как на финишной странице создать произвольное количество run чекбоксов (например три), при условии что ф-ция MUI_FINISHPAGE_SHOWREADME уже используется.
как на финишной странице создать произвольное количество run чекбоксов »
В дополнение к FINISHPAGE_RUN (можно и вообще без него ) добавить CUSTOMFUNCTION_SHOW ( и CUSTOMFUNCTION_LEAVE ) перед MUI_PAGE_FINISH и создать n-чекбоксов :
outfile "test_FINISHPAGE.exe"
!include MUI2.nsh
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_TEXT " RunFunction"
!define MUI_FINISHPAGE_RUN_FUNCTION "RunFunction"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW CustomFinish
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE FinishLeave
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"
var Checkbox
var Checkbox2
var Checkbox3
Function CustomFinish
${NSD_CreateCheckbox} 120u 110u 100% 10u " Доп чекбокс"
Pop $Checkbox
SetCtlColors $Checkbox "" "ffffff"
${NSD_CreateCheckbox} 120u 130u 100% 10u " Доп чекбокс2"
Pop $Checkbox2
SetCtlColors $Checkbox2 "" "ffffff"
${NSD_CreateCheckbox} 120u 150u 100% 10u " Доп чекбокс3"
Pop $Checkbox3
SetCtlColors $Checkbox3 "" "ffffff"
FunctionEnd
Function FinishLeave
${NSD_GetState} $Checkbox $0
${If} $0 <> 0
MessageBox mb_ok "Доп чекбокс отмечен"
${EndIf}
${NSD_GetState} $Checkbox2 $0
${If} $0 <> 0
MessageBox mb_ok "Доп чекбокс2 отмечен"
${EndIf}
${NSD_GetState} $Checkbox3 $0
${If} $0 <> 0
MessageBox mb_ok "Доп чекбокс3 отмечен"
${EndIf}
FunctionEnd
Function RunFunction
MessageBox mb_ok "Чего то запустили"
FunctionEnd
Section
SectionEnd
WimImage plug-in
This plugin is designed to remove the current 2GB limit in NSIS by creating and extracting images contained in .wim files that are separate to the installer.
http://nsis.sourceforge.net/WimImage_plug-in
natasha_82
18-09-2014, 19:18
Добрый день.
Подскажите, как можно сделать такое:
в момент установки 121.ехе, ехе запускается от пользователя и от администратора, соответственно активны два процесса с одинаковыми именами.
Как можно проверить и запретить запуск 3-го процесса с таким же именем?
Если запущен один процесс и не запускать второй - это знаю, не подходит(((
Не могли бы в таком случае выложить ваш правленный modern.exe? »
Serg866, прикрепил архив к этому сообщению.
активны два процесса с одинаковыми именами.
Как можно проверить и запретить запуск 3-го процесса с таким же именем? »
1. Определить наличие процессов с указанным образом, сохранив PID первых двух найденных процессов в переменные
2. При проверке убивать все процессы, PID которых отличается от сохранённых ранее
Всю суть не особо уловил, кто там и что у вас запускает и как вообще всё устроено, но хотя бы с логикой действий вам думаю подсказал...
Давно интересует такой вопрос - каким образом удалять/устанавливать файлы (в частности DLL) "занятые" ShellExtension не перезагружая explorer ( или подобное ПО, типа TotalCommander и т.п. )?
К примеру, установили ПО из собственного NSIS инсталлятора , в котором при участии какой то DLL , в контекстное меню добавились какие то пункты. Если удалять это ПО, при запущенном explorer_e , то как только процесс доходит до удаления этой DLL - получаем предупреждение, что файл(ы) уже используется.
Ессно, если закрыть explorer, то удаление произойдёт нормально. Но это совершенно не интересно.
В то же время штатный анинсталлер этого ПО, спокойно удаляет эти же файлы при запущенном explorer_e ! Как это он делает ?
Возможно ли решить такую задачу в NSIS ?
Есть предположение, что используется функция System::Call 'Ole32::CoFreeUnusedLibraries() v'
Давно интересует такой вопрос - каким образом удалять/устанавливать файлы (в частности DLL) "занятые" ShellExtension не перезагружая explorer ( или подобное ПО, типа TotalCommander и т.п. )? »
сначала удаляешь записи реестра ShellExtension, потом ${RefreshShellIcons}, потом удаляешь dll-ки самой ShellExtension
сначала удаляешь записи реестра ShellExtension, потом ${RefreshShellIcons}, потом удаляешь dll-ки самой ShellExtension »
записи реестра удалются в первую очередь, но толка нет. RefreshShellIcons, по моему вообще здесь не при чём...
DLL занята системой, и хоть тресни никак не освобождается для удаления...
Serg866, прикрепил архив к этому сообщению. »
Всё равно не получается брендинг-текст кликабельным. Может быть ещё кто-нибудь протестирует на 3 версии?
UPD
В общем сработало только при таком варианте кода:
Function myGuiInit
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $HWNDPARENT 1028
EnableWindow $0 1
Linker::link /NOUNLOAD $0 "http://www.forum.oszone.net/ "
FunctionEnd
Function .onGUIEnd
Linker::unload
FunctionEnd
Всё равно не получается брендинг-текст кликабельным. »
Что у вас опять не получается? Вот держите пример сценария:
; NSIS v3.0b - Modern User Interface (MUI2)
; Пример создания кликабельной фирменной надписи при помощи плагина Linker v1.2
#--------------------------------
# Заголовочные файлы
; Подключаем тип интерфейса Modern UI
!include "MUI2.nsh"
#--------------------------------
# Параметры инсталлятора
; Название
Name "$\"Кликабельная надпись$\""
; Имя файла
OutFile "CBL-MUI.exe"
; Каталог установки по умолчанию
InstallDir "$LOCALAPPDATA\Modern UI Test"
; Уровень привилегий инсталлятора для Windows Vista
RequestExecutionLevel user
; Фирменная надпись
BrandingText "Моя фирменная надпись"
#--------------------------------
# Параметры интерфейса
; Подтверждать отмену установки
!define MUI_ABORTWARNING
; Трехстрочная надпись в заголовке диалога приветствия
!define MUI_WELCOMEPAGE_TITLE_3LINES
#--------------------------------
# Диалоги инсталлятора
; Выполняем подключение плагина для создания кликабельной надписи
; при инициализации графической оболочки инсталлятора
!define MUI_CUSTOMFUNCTION_GUIINIT BrandLink
; ИНСТАЛЛЯЦИЯ
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
; Устанавливаем файл GUI, в котором для элемента управления ID=1028
; (фирменная надпись) удалено свойство WS_DISABLED (отключен)
ChangeUI all "${NSISDIR}\Contrib\UIs\modern_modl.exe"
#--------------------------------
# Язык инсталлятора
!insertmacro MUI_LANGUAGE "Russian"
#--------------------------------
# Секции инсталлятора
Section "Dummy Section" SecDummy
SectionEnd
#--------------------------------
# Описание секций
; Строка с текстом описания
LangString DESC_SecDummy ${LANG_RUSSIAN} "Тестовая секция."
; Выводим строку в поле описания секции
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
# ===============================
# ФУНКЦИИ ИНСТАЛЛЯТОРА
# ===============================
Function .onInit
; Инициализация каталога плагинов
InitPluginsDir
SetOutPath $PLUGINSDIR
FunctionEnd
# Функция инициализации графической оболочки инсталлятора
Function BrandLink
GetDlgItem $0 $HWNDPARENT 1028
; Вызов библиотеки Linker для создания кликабельной URL-ссылки
Linker::link /NOUNLOAD $0 "http://forum.oszone.net/thread-248731-132.html"
FunctionEnd
# Функция выгрузки графической оболочки инсталлятора
Function .onGUIEnd
Linker::unload
FunctionEnd
# ===============================
Скомпилируйте и проверьте. При необходимости сделайте в сценарии изменения под свою программу.
P.S. На офсайте для ANSI версии плагина Linker v1.2 (http://nsis.sourceforge.net/Linker_plug-in) ошибочно выложена Unicode версия. Поэтому используйте плагин из моего архива (см. сообщение 1309 (http://forum.oszone.net/post-2406242-1309.html)).
Определить версию ( VerifyOSVersion ) новой Windows 10 (как и предыдущие версии ОС ) можно с помощью StdUtils
автор LoRd_MuldeR
http://sourceforge.net/projects/muldersoft/files/StdUtils-Plugin%20(NSIS)/Testing/StdUtils.2014-10-03.zip/download
kotkovets,
Не выходило случаем еще обновок для winver2.nsh, по части определения версий для Win 8/8.1/9/10 ?!
kotkovets
05-10-2014, 20:53
Не выходило случаем еще обновок для winver2.nsh, по части определения версий для Win 8/8.1/9/10 ?! »
а че телится сразу к Win 8-100 сделаю ))
Встречаем NSIS v3.0b1. :yahoo:
Что нового (изменилось, добавлено) - читаем здесь (http://nsis.sourceforge.net/Docs/AppendixF.html#v3.0b1). Загрузить релиз можно с оффсайта (http://nsis.sourceforge.net/Download). Отчеты об ошибках сообщаем на форум NSIS (http://forums.winamp.com/showthread.php?t=379484).
Flix, благодарю за готовый скрипт.
Однако, есть баг: Если нажать на ссылку, а потом перейти обратно к окошку инсталлятора, то ссылку "колбасит". На картинке видно что с ней происходит)
У меня WinXP
http://i68.fastpic.ru/big/2014/1008/4c/42e62b60c73286c448f73fde4c6cfc4c.jpg
К сожалению с таким багом не смогу использовать кликабельный брендинг-текст в своём инсталляторе.
Может быть подскажете возможно ли просто ссылку сделать кликабельной в тексте на страницах установщика?
Например текст:
Рекомендуем посетить сайт ввв.мояпрога.ру и чтобы текст ввв.мояпрога.ру был кликабелен?
Не могу никак с этим плагином разобраться(
А сам НСИС текст ссылок в линки не преобразовывает. В справочнике тоже нет инфы о том как ссылки добавлять в текст. Вроде НСИСу уже лет 10, а таких элементарных возможностей почему-то нет...
Serg866,
Попробуй плагин BrandingURL http://nsis.sourceforge.net/BrandingURL_plug-in
Linker плаг всегда странно работал... ( Хотя для этого дела плагин и не оч то нужен. Достаточно ExecShell "open" "http://....." с соответствующей "обвязкой" )
OutFile BrandingURL_test.exe
!include "MUI2.nsh"
BrandingText "BrandingURL"
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${NSISDIR}\Docs\Modern UI\License.txt"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
InstallDir "$TEMP"
Function onGUIInit
BrandingURL::Set /NOUNLOAD "255" "0" "0" "http://nsis.sourceforge.net/Main_Page"
FunctionEnd
Function .onGUIEnd
BrandingURL::Unload
FunctionEnd
Section
SectionEnd
Вроде НСИСу уже лет 10, а таких элементарных возможностей почему-то нет... »
Всё давно придумано и давно на форуме расписано. Не хочешь плагин, хочешь кликабельный текст с твоей страницей или кликабельную картинку с твой лэйбой, причём в любом месте страницы - на здоровье, код в теме был. Другое дело, это получится более громоздко...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC