PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 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

Serg866
30-08-2014, 10:42
K.A.V., спасибо за ответ!
После удаления строки скрипт скомпилировался без ошибок.


Также у меня возник вопрос по другому примеру из справки: "Кликабельный BrandingText".
Возможно что-то неправильно делаю, но сделать брендинг-текст в виде ссылки у меня не получается, ресурс интерфейса подправил как указано в примере. Возможно плагин Linker не работает с 3-й версией NSIS? Если Вас не затруднит, проверьте, пожалуйста работоспособность кода из примера на NSIS 3b0.

P.S есть, конечно, аналогичный плагин - BrandingURL, но результат его работы мне не очень нравится, т.к кликабельность ссылки получается на всю нижнюю площадь инсталлятора, а не только в области самой ссылки.

Flix
04-09-2014, 23:35
Если Вас не затруднит, проверьте, пожалуйста работоспособность кода из примера на NSIS 3b0. »
Все прекрасно работает, проблем нет. Проверил как ANSI версию, так и UNICODE. Скорее всего, вы что-то делаете (или сделали) неправильно.

Serg866
05-09-2014, 15:41
Flix, спасибо. Не могли бы в таком случае выложить ваш правленный modern.exe?

diakov
06-09-2014, 10:42
Уважаемые, подскажите как на финишной странице создать произвольное количество run чекбоксов (например три), при условии что ф-ция MUI_FINISHPAGE_SHOWREADME уже используется.

MKN
06-09-2014, 19:18
как на финишной странице создать произвольное количество 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

MKN
17-09-2014, 15:24
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-го процесса с таким же именем?

Если запущен один процесс и не запускать второй - это знаю, не подходит(((

Flix
23-09-2014, 19:32
Не могли бы в таком случае выложить ваш правленный modern.exe? »
Serg866, прикрепил архив к этому сообщению.

K.A.V.
24-09-2014, 16:56
активны два процесса с одинаковыми именами.
Как можно проверить и запретить запуск 3-го процесса с таким же именем? »
1. Определить наличие процессов с указанным образом, сохранив PID первых двух найденных процессов в переменные
2. При проверке убивать все процессы, PID которых отличается от сохранённых ранее

Всю суть не особо уловил, кто там и что у вас запускает и как вообще всё устроено, но хотя бы с логикой действий вам думаю подсказал...

MKN
26-09-2014, 17:27
Давно интересует такой вопрос - каким образом удалять/устанавливать файлы (в частности DLL) "занятые" ShellExtension не перезагружая explorer ( или подобное ПО, типа TotalCommander и т.п. )?

К примеру, установили ПО из собственного NSIS инсталлятора , в котором при участии какой то DLL , в контекстное меню добавились какие то пункты. Если удалять это ПО, при запущенном explorer_e , то как только процесс доходит до удаления этой DLL - получаем предупреждение, что файл(ы) уже используется.
Ессно, если закрыть explorer, то удаление произойдёт нормально. Но это совершенно не интересно.

В то же время штатный анинсталлер этого ПО, спокойно удаляет эти же файлы при запущенном explorer_e ! Как это он делает ?
Возможно ли решить такую задачу в NSIS ?

Есть предположение, что используется функция System::Call 'Ole32::CoFreeUnusedLibraries() v'

vahe-91
29-09-2014, 16:15
Давно интересует такой вопрос - каким образом удалять/устанавливать файлы (в частности DLL) "занятые" ShellExtension не перезагружая explorer ( или подобное ПО, типа TotalCommander и т.п. )? »
сначала удаляешь записи реестра ShellExtension, потом ${RefreshShellIcons}, потом удаляешь dll-ки самой ShellExtension

MKN
29-09-2014, 21:37
сначала удаляешь записи реестра ShellExtension, потом ${RefreshShellIcons}, потом удаляешь dll-ки самой ShellExtension »
записи реестра удалются в первую очередь, но толка нет. RefreshShellIcons, по моему вообще здесь не при чём...
DLL занята системой, и хоть тресни никак не освобождается для удаления...

Serg866
30-09-2014, 05:27
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

Flix
30-09-2014, 21:44
Всё равно не получается брендинг-текст кликабельным. »
Что у вас опять не получается? Вот держите пример сценария:
; 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)).

MKN
03-10-2014, 12:11
Определить версию ( VerifyOSVersion ) новой Windows 10 (как и предыдущие версии ОС ) можно с помощью StdUtils
автор LoRd_MuldeR
http://sourceforge.net/projects/muldersoft/files/StdUtils-Plugin%20(NSIS)/Testing/StdUtils.2014-10-03.zip/download

MaGoth
04-10-2014, 06:35
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 сделаю ))

Flix
08-10-2014, 01:57
Встречаем 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).

Serg866
08-10-2014, 02:34
Flix, благодарю за готовый скрипт.
Однако, есть баг: Если нажать на ссылку, а потом перейти обратно к окошку инсталлятора, то ссылку "колбасит". На картинке видно что с ней происходит)
У меня WinXP
http://i68.fastpic.ru/big/2014/1008/4c/42e62b60c73286c448f73fde4c6cfc4c.jpg

К сожалению с таким багом не смогу использовать кликабельный брендинг-текст в своём инсталляторе.

Может быть подскажете возможно ли просто ссылку сделать кликабельной в тексте на страницах установщика?

Например текст:
Рекомендуем посетить сайт ввв.мояпрога.ру и чтобы текст ввв.мояпрога.ру был кликабелен?
Не могу никак с этим плагином разобраться(
А сам НСИС текст ссылок в линки не преобразовывает. В справочнике тоже нет инфы о том как ссылки добавлять в текст. Вроде НСИСу уже лет 10, а таких элементарных возможностей почему-то нет...

MKN
08-10-2014, 10:38
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