|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Пользователь Сообщения: 98
|
Профиль | Сайт | Отправить PM | Цитировать Не могу сообразить! Подскажите, пожалуйста.
Нужно найти строку, например, 127.0.0.1 www.somesite.net в файле hosts и если строка существует, выполнить действие не связанное ни с найденной строкой, ни с самим файлом. |
Отправлено: 17:16, 02-02-2021 | #2561 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать Цитата Kopejkin:
|
|
Отправлено: 17:41, 02-02-2021 | #2562 |
Ветеран Сообщения: 2267
|
Профиль | Отправить PM | Цитировать Цитата Begin2Fly:
![]() Лучше использовать NewTextreplace плагин (поддерживает utf-8, utf-16LE / BE и все ANSI) : В плагине ещё много полезных функций и ключей. |
|
Последний раз редактировалось MKN, 04-02-2021 в 12:08. Отправлено: 12:00, 04-02-2021 | #2563 |
Ветеран Сообщения: 2267
|
Профиль | Отправить PM | Цитировать Подскажите пожалуйста, как лучше (и попроще) реализовать такую задачу ? :
На кастомной странице есть созданное новое окно или область ListBox + разные элементы (чекбоксы, кнопки...). Необходимо, при наведении указателя мыши или курсора на какой либо элемент(например на чекбокс) послать в это окно или ListBox(отобразить в нём) некую информацию (из переменной) на время "наведения" (если указатель перемещён с элемента, инфа исчезает). Нечто по аналогии с выводом ToolTips, только не во всплывающем окне, а в имеющемся. ps Попутно вопрос - в ToolTip плагинах (ToolTips.dll или nsTips от kotkovets ) всплывающее сообщение через некоторое время закрывается-исчезает. Можно ли этого избежать ? (Т.е., пока курсор или указатель мыши находятся на элементе, сообщение "удерживается" на месте.) |
Последний раз редактировалось MKN, 05-02-2021 в 13:47. Отправлено: 13:35, 05-02-2021 | #2564 |
Новый участник Сообщения: 41
|
Профиль | Отправить PM | Цитировать K.A.V., здравствуйте. Спасибо за разложенный по полочкам ответ. Все просто и в доступной форме.
Я сумел связаться с человеком из-за фразы, которого произошел весь этот сыр - бор. Напомню ее: "Для инсталлятора с высокими правами, который будет применяться в системах с включенным UAC не существует железного способа автоматической отмены установки, если пользователь оказался с малыми правами. Это закончилось в эпоху ХР". Я дал ссылку на мои попытки объяснить. Вот его ответ. В начале были смайлы смеха: "Настаиваю! Невозможно сделать установщик с высокими правами с предоставленными примерами кодов , чтобы запустил его бесправный пользователь при включенном UAC и всплыло инф. сообщение "Нет прав администратора. До свидания !", после которого последовала бы команда quit и произошло завершение. Такое с включенным UAC сделать не возможно. Система переберет права на себя и чихать она хотела на ваше написанное MessageBox MB_OK "Нет прав администратора. До свидания !" и следующее за ним quit. Такой фокус закончился в ХР. Ты в теме не верно задал вопрос, следовательно получил множество толкований не по сути. А суть я выше описал. Тебе должны были кратко ответить, что никакого сообщения и завершения с включенным UAC не будет. Точка. А тебе начали рассказывать о принципах работы контроля учетных записей. Я сейчас "на пальцах" тебе докажу, что те коды не рабочие и рабочие. В зависимости, что подразумевать под термином "рабочие". И так. Первый пример. Если ты в код пишешь проверку на "бесправного" с сообщением и завершением, а "бесправный" с включенным UAC сообщение не увидит, и завершение не произойдет значит код не исполнил записанные в нем действия. Код не рабочий. Точка. Второй пример. Если ты в код пишешь проверку на "бесправного" с сообщением и завершением и система правильно определила "бесправного", но проигнорировала заложенное в коде сообщение и завершение, тем самым дав возможность продолжить установку от админа, с условием, что запись админа не под паролем. Система предусмотрела, что админ с отсутствием пароля может доверять "бесправному". Код рабочий. Точка. Умная система игнорирует примитивный код." Лично я все понял. Действительно доступно и без высоких материй. А я считал, что этот человек совсем не умеет объяснять. Вопрос закрыт. |
Отправлено: 15:37, 05-02-2021 | #2565 |
![]() Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MKN:
Могу предложить вариант с помощью создания функции с таймером, в которй будем определять положение курсора и решать, что делать дальше, в зависимости от того, над каким элементом сейчас находится курсор Цитата MKN:
![]() о, готовый код
!include "nsDialogs.nsh" !include "MUI2.nsh" !include "LogicLib.nsh" !include "WinMessages.nsh" Name nsDialogs OutFile nsDialogs.exe RequestExecutionLevel user ShowInstDetails show Var Dialog Var hwnd_Text # хэндл текстового поля var hwnd_Button # хэндл кнопки, над которой отслеживаем курсор var onMouseOverFuncAddr # адрес функции, которая будет выполняться при отслеживании курсора var ttip Page custom pgPageCreate pgPageLeave !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" ########################################## # ToolTip ########################################## !define WS_POPUP 0x80000000 !define TTF_SUBCLASS 0x010 !define /math TTM_ACTIVATE ${WM_USER} + 1 !define /math TTM_ADDTOOL ${WM_USER} + 4 !define /math TTM_SETTOOLINFO ${WM_USER} + 9 !define /math TTM_TRACKACTIVATE ${WM_USER} + 17 Function ShowToolTip StrCpy $2 $ttip System::Call 'USER32::IsWindowVisible(ir2)i.r0' ${If} $0 == 0 pop $1 StrCpy $2 "" ${If} $ttip = 0 System::Call 'USER32::CreateWindowEx(i${WS_EX_TOPMOST},t"tooltips_class32",i,i${WS_POPUP},i,i,i,i,i0,i,i,i)i.r2' StrCpy $ttip $2 ${EndIf} FindWindow $3 "#32770" "" $HWNDPARENT System::Call '*(i40,i${TTF_SUBCLASS},i$3,i0x408,i,i,i,i,i0,tr1)i.r1' SendMessage $ttip ${TTM_ADDTOOL} 0 $1 SendMessage $ttip ${TTM_SETTOOLINFO} 0 $1 SendMessage $ttip ${TTM_ACTIVATE} 1 0 SendMessage $ttip ${TTM_TRACKACTIVATE} 1 $1 System::Free $1 ${EndIf} FunctionEnd ########################################## # ToolTip ########################################## Function my_onMouseOver # функция с выполнением по таймеру, здесь можно отслеживать курсор на всех элекемнтах диалога ; получаем координаты курсора System::Alloc 16 Pop $0 System::Call USER32::GetCursorPos(ir0) System::Call *$0(i.r1,i.r2) System::Free $0 System::Call USER32::WindowFromPoint(ir1,ir2)i.r1 ; в переменной $1 теперь хэндл элемента, над которым курсор ${If} $1 = $hwnd_Button ${NSD_SetText} $hwnd_Text "Курсор над кнопкой" push "мой текст в tooltip" call ShowToolTip ${Else} ${NSD_SetText} $hwnd_Text "Курсор вне кнопки" SendMessage $ttip ${TTM_ACTIVATE} 0 0 ${EndIf} FunctionEnd Function .onInit GetFunctionAddress $onMouseOverFuncAddr my_onMouseOver ; получаем адрес функции, которая будет выполняться по таймеру для отслеживания курсора FunctionEnd Function pgPageCreate nsDialogs::Create 1018 Pop $Dialog ${If} $Dialog == error Abort ${EndIf} ${NSD_CreateText} 30% 10u 40% 15u "..." Pop $hwnd_Text ${NSD_CreateButton} 30% 50u 40% 12u "Кнопочка" Pop $hwnd_Button nsDialogs::CreateTimer $onMouseOverFuncAddr 100 ; создаём таймер для отслеживания курсора nsDialogs::Show FunctionEnd Function pgPageLeave FunctionEnd Section SectionEnd ps Красоту и качество кода не гарантирую, уж простите, давно этим не занимался |
||
------- Отправлено: 09:34, 06-02-2021 | #2566 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Добрый денечек. Много лет читаю эту замечательную темку. Образования в этом деле не имею. Но с темы по мелочам все понятненько. Несколько раз делал шутки в виде сообщений в несколько ходов с вопросами и подсовывал их жене вместо ее браузера. Во смеху было. А сейчас совсем я в непонятках с этими RequestExecutionLevel. Такой вопросик. Какая получается разница если установщик позначен RequestExecutionLevel highest или RequestExecutionLevel admin. Интересует чтобы мой файлик смог сделать то что делает администратор. Для этого нужно только обязательно RequestExecutionLevel admin? Или подойдет RequestExecutionLevel highest? Как я понял в установщика с RequestExecutionLevel admin самые высокие права. Тогда какие функции теряет установщик с RequestExecutionLevel highest в сравнении с RequestExecutionLevel admin? Совсем не понятно. Если не тяжело, пожалуйста объясните простенько. Спасибочки.
|
Отправлено: 10:15, 07-02-2021 | #2567 |
Ветеран Сообщения: 2267
|
Профиль | Отправить PM | Цитировать Простая (казалось бы...) задача : Нужно определить наличие ключей в реестре.
ОС Windows 10 (20h2) x64, ключи : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsSelfHost\UI\Visibility HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Spynet Не тут то было... Права доступа похоже не при чём (да и вроде как не нужны для этого...). Пример, который нормально работает (проверял в W7) с "крутым" владельцем другого ключа ( с TrustedInstaller) : !addplugindir . !include "LogicLib.nsh" !include "Registry.nsh" OutFile "IfKeyExists-test.exe" RequestExecutionLevel admin Var NameKey Section StrCpy $NameKey "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\AGP" ClearErrors ${registry::KeyExists} "$NameKey" $R0 ${If} $R0 = -1 MessageBox MB_OK "NO Key" ${ElseIf} $R0 = 0 MessageBox MB_OK "OK!" ${EndIf} ${registry::unload} SectionEnd В чём дело ? Кто "охраняет" конкретно эти ключи ? У кого какие соображения ? ps к слову сказать, эти ключи не находятся при получении ACL, и при использовании команд PowerShell, и при работе с subinacl.exe... |
Последний раз редактировалось MKN, 04-03-2021 в 15:34. Отправлено: 15:22, 04-03-2021 | #2568 |
Старожил Сообщения: 226
|
Профиль | Отправить PM | Цитировать Цитата MKN:
![]() Примерно таким макросом можно оформить проверку: # macro + def !define RegKeyExists '!insertmacro RegKeyExists' !macro RegKeyExists RETURN ROOTKEY SUBKEY Push $0 ClearErrors EnumRegValue $0 ${ROOTKEY} "${SUBKEY}" 0 IfErrors 0 +5 EnumRegKey $0 ${ROOTKEY} "${SUBKEY}" 0 IfErrors 0 +3 StrCpy ${RETURN} 0 Goto +2 StrCpy ${RETURN} 1 Pop $0 !macroend # Example ${RegKeyExists} $R0 HKLM64 "SOFTWARE\Microsoft\WindowsSelfHost\UI\Visibility" |
|
Отправлено: 16:24, 04-03-2021 | #2569 |
Ветеран Сообщения: 2267
|
Профиль | Отправить PM | Цитировать Цитата iglezz:
И я вроде как "выудил" эти ключи из реестра, в том же виде, какими они и были в x64... Или в рег-плагине необходимо конкретно указывать на разрядность ОС ? (в доке этого не видел...) Вероятно забыл про SetRegView 64... и как быть с репликой из ps ? |
|
Последний раз редактировалось MKN, 04-03-2021 в 17:38. Отправлено: 17:08, 04-03-2021 | #2570 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|