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

MKN
16-04-2012, 09:11
bugmenotagain,
По моему, недоумение и разночтение вызывает не внятно поставленная тобой задача и не ясные конечные цели. Т.е. в целом - весь твой вопрос.
Вот ты пишешь :
Обязательно программу распаковывать в TEMP? Хочу как обычно, чтоб прямо из setup.exe устанавливать. Зачем ее куда то копировать. »
Не обязательно, и файлы устанавливаются-распаковываются (и запускаются "вложенные" в скрипт исполняемые файлы) , как правило непосредственно из setup.exe , но иногда, ИСХОДЯ ИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ И СИТУАЦИИ, "вспомогательные" нужные для установки компоненты ( те же устанвщики MSI и т.д.), предварительно копируются во временную папку и уже оттуда запускаются-устанавливаются).

kotkovets
16-04-2012, 12:05
MKN, кнопки ты не заблокирушь так просто, событие обрабатывает nsis, поимимо твоего кода со скрипта, добавляется еще куча
сдужебных и необходимых команд.
конечно можно блокирнуть, перехватывать событие кнопки и ставить хук, но тока через внешнюю dll - много возни, поверь.

MKN
16-04-2012, 12:27
много возни, поверь. »
Конечно верю :) А как быть ?

kotkovets
16-04-2012, 12:47
А как быть ? »
Во время создания странички заблокировать кнопку командой EnableWindow,
перенести фокус на кастомную кнопку странички, при нажатии кнопки кастомной(после необходимых манипуляций),
разблокировать кнопку командой EnableWindow и через SendMessage передать событие нажатия кнопки,
${BM_CLICK} - как то так, что ли...

K.A.V.
16-04-2012, 13:29
Во время создания странички заблокировать кнопку командой EnableWindow »
Я не особо вникал во "внутренности" граф. интерфейса NSIS, но где это прописывать? (если не учитывать факт создания кастомной странички)
Я смотрел макросы например MUI_WELCOM в System.nsh (на него ссылается MUI.nsh), но там по сути, нигде не отрабатывает команда EnableWindow на кнопку Далее

Даже если добавлять функцию как я написал ранее, перед самой страничкой с командой EnableWindow, она тоже не делает кнопку не активной :dont-know

Единственный способ как мне кажется, это проверять в функции (как опять же я выше написал) свои "потребности "и нажимать на кнопку "Назад", если что-то не так...

Если кто узнает другой способ, пишите :)

kotkovets
16-04-2012, 14:27
Даже если добавлять функцию как я написал ранее, перед самой страничкой с командой EnableWindow, она тоже не делает кнопку не активной »
пример на кастомной страничке:
!include MUI2.nsh
Page custom nsDialogsPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

OutFile "Example.exe"

var dlg
var btn
var next

Function nsDialogsPage
nsDialogs::Create 1018
pop $dlg
GetDlgItem $next $HWNDPARENT 1
EnableWindow $next ${SW_HIDE}
${NSD_CreateButton} 100u 14u 50u 14u "Button"
pop $btn
${NSD_OnClick} $btn BtnClick
nsDialogs::Show
FunctionEnd

Function BtnClick
pop $btn
EnableWindow $next ${SW_SHOW}
SendMessage $next ${BM_CLICK} 0 0
FunctionEnd

Section
SectionEnd
nsis предоставляет к стандартным страничкам 3 функции
1. перед открытием странички
2. когда страничка открыта
3. когда страничка закрывается
пример на стандартной страничке:
!include MUI.nsh
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW COMPONENTS_SHOW
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"

outfile test.exe
OutFile "Example.exe"

var next

Function COMPONENTS_SHOW
GetDlgItem $next $HWNDPARENT 1
EnableWindow $next 0
FunctionEnd

Section /o test TEST_SEC

SectionEnd

Function .OnSelChange
SectionGetFlags ${TEST_SEC} $0
StrCmp $0 1 0 +2
EnableWindow $next ${SW_SHOW}
StrCmp $0 0 0 +2
EnableWindow $next ${SW_HIDE}
FunctionEnd

XCV
17-04-2012, 13:36
маленький вопросик, какой командой можно прекратить установку nsis? тоесть есть в скрипте проверка на существование ключа в реестре, если он есть установка продолжается, а вот если нет инсталяция должна прекратится...

MKN
17-04-2012, 13:41
XCV,
При не соответствии условию - Quit

wolkow70
18-04-2012, 12:26
kotkovets,
посоветуйте в таком вопросе:

!insertmacro MUI_PAGE_STARTMENU Application $MENU

Section "Создать группу ярлыков в меню Пуск" StartMenu

!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
;
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\$MENU"
CreateShortCut "$SMPROGRAMS\$MENU\${PRODUCT_NAME}.lnk" "$INSTDIR\USBSafelyRemove.exe"
CreateShortCut "$SMPROGRAMS\$MENU\Справка ${PRODUCT_NAME}.lnk" "$INSTDIR\USBSafelyRemoveRu.chm"
CreateShortCut "$SMPROGRAMS\$MENU\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\uninstall.exe"
;
!insertmacro CreateInternetShortcut \
"$SMPROGRAMS\$MENU\Веб-сайт ${PRODUCT_NAME}" \
"${PRODUCT_WEB_SITE}" \
"$INSTDIR\USBsrURL.ico" "0"
;
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Все нормально папка с ярлыками создается, где указано.

В деинсталляторе прописал:

Section Uninstall
;
SetShellVarContext all
RMDir /r "$SMPROGRAMS\$MENU"

при удалении на XP снесло почти все меню Пуск. пришлось восстанавливать систему. Что тут может быть не так?

kotkovets
18-04-2012, 14:02
wolkow70, Тысячу раз говорил:
значения переменных из секций инсталлятора не переносятся в секции деинсталлятора!!!
---
поэтому значение переменной $MENU в деинсталляторе может быть, какое угодно!
примеров стартменю великое множество!

wolkow70
18-04-2012, 14:22
значения переменных из секций инсталлятора не переносятся в секции деинсталлятора!!! »
Это я уже понял на горьком опыте. Тогда как прописать удаление то? Деинсталлятор же не знает в какую папку я поместил ярлыки. У меня они пишутся в Программы-Утилиты-USB Safely Remove (но у другого пользователя может отличаться...

Переменную я объявлял как в справке написано:
Var MENU #объявляем нашу переменную

K.A.V.
18-04-2012, 15:21
Это я уже понял на горьком опыте. Тогда как прописать удаление то? »
Вроде бы всё правильно!
Попробуйте в секцию Uninstall добавить первой строкой
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $MENU

И смотрите, не могло просто так
снесло почти все меню Пуск »
может у вас в коде ранее что-то отрабатывает

wolkow70
18-04-2012, 15:55
может у вас в коде ранее что-то отрабатывает »
Нет, закоментировал :
;RMDir /r "$SMPROGRAMS\$MENU"
и перестало сносить.

Отдельно комманды прописываю, не удаляет.
Похоже не понимает переменную.
Delete "$SMPROGRAMS\$MENU\${PRODUCT_NAME}.lnk"

Попробую сделать как вы подсказали.

Константин_Кокухов@vk
18-04-2012, 16:07
Привет.
После прочтения вашего справочника по NSIS, сваялся маленький скриптик, с использованием RegistryFunc.nsh v2.0. Вот только незадача в том, что при попытке выдернуть из справочника саму библиотеку она выдергивается без форматирования. Мощности устройства head не хватает что бы красиво ее отформатировать и сделать так, что бы она нормально заработала. Сам файл библиотеки мне найти не удалось. Можете кинуть ссылочку откуда можно скачать эту библиотеку в нормально виде.

Спасибо.

wolkow70
18-04-2012, 16:08
Сделал так:

Section Uninstall
SectionIn 1 RO
;
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $MENU
SetShellVarContext all
RMDir /r "$SMPROGRAMS\$MENU"

Сносить меню перестало, но и удалять папку не удаляет.

K.A.V.
18-04-2012, 16:08
закоментировал :
;RMDir /r "$SMPROGRAMS\$MENU" »
Значит переменная $MENU пустой выходит

Что мешает, тогда, сохранить её значение в реестр при установке??
Вы же создаёте деинсталлятор, запишите в ветку "Uninstall" своей программы значение этой переменной, и читайте значение параметра в эту переменную во время запуска деинсталлятора....

Можете кинуть ссылочку откуда можно скачать эту библиотеку в нормально виде. »
Все плагины можно скачать отсюда => http://nsis.sourceforge.net/Category:Plugins


kotkovets, внеси в шапку ссылку на плагины, либо я её не вижу, либо её там реально нет :)

Константин_Кокухов@vk
18-04-2012, 16:18
Цитата Константин_Кокухов@vk:
Можете кинуть ссылочку откуда можно скачать эту библиотеку в нормально виде. »
Все плагины можно скачать отсюда => http://nsis.sourceforge.net/Category:Plugins »
Спасибо, но я говорил про библиотеку которую написал kotkovets и которая не использует плагины.

wolkow70
18-04-2012, 16:20
Из содержания хедера StartMenu.nsh похоже, что значение переменной само в реестр прописывается и читаться должно макросом. Как его вызвать не пойму.

Спасибо, но я говорил про библиотеку которую написал kotkovets и которая не использует плагины. »
Я сейчас ее только для пробы Оперой скачал. Нужно сохранять, а не пытаться открыть.

K.A.V.
18-04-2012, 16:25
Спасибо, но я говорил про библиотеку которую написал kotkovets и которая не использует плагины. »
Нормально всё сохраняется из справочника

Как его вызвать не пойму. »
Ну вы ей богу! :)
Берёте прописываете свою команду на запись в реестр и сохраняете значение этой переменной во время установки:

В секции установки:
WriteRegStr "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "MyCustom" "$MENU"

В первую строчку секции Uninstall пропишите чтение из этого параметра:
ReadRegStr $MENU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "MyCustom"

Попробуйте так...

Константин_Кокухов@vk
18-04-2012, 16:27
Попробуйте так... »

Большое спасибо.




© OSzone.net 2001-2012