|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Ну вы даёте, ребята
Не в обиду будет сказано, но всё то, что выше описал динозавра о якобы некорректном коде с IsUserAdmin и RequestExecutionLevel прямо говорит о небольшом непонимании, как это всё работает. Может, вся проблема в том, что человек просто не понимает, для чего нужно RequestExecutionLevel/манифест и что происходит, когда он "повышает" права через UAC (Запуск от имени)? Простой пример: Цитата динозавра:
Цитата динозавра:
Всё же достаточно просто, на мой взгляд RequestExecutionLevel прописываем тот уровень прав на старте приложения (грубо говоря, это контролирует система, сразу понимая, кто перед ней и что ему нужно), который нам необходим для выполнения всех операций. Если вы делаете установку серьёзного ПО с записью в системные папки - то без повышенных прав вам не обойтись Вы просто неправильно понимаете смысла запуска приложения через UAC (Запуск от имени администратора) и как это отразится на уровне скрипта и работе пакета установки Вся соль в том, что когда вы повышаете права через UAC (или прописываете в скрипте RequestExecutionLevel admin), то вы можете забыть про своего "оригинального" пользователя в скрипте, под которым работаете (его имени пользователе и типе учетной записи), по-крайней мере голыми средствами NSIS вы не узнаете правды о запустившем инсталлятор (но есть но (в конце )) На пальцах: 1. Вася (не админ) => RequestExecutionLevel user => В скрипте: Вася (IsUserAdmin == 0) 2. Вася (не админ) => RequestExecutionLevel admin => В скрипте: Антон (IsUserAdmin == 1) Не понимаю, зачем такое (опять же) извращение с определением типа учетной записи/закрытие инсталлера и т.д. (вы точно установщик пишите?) Т.к. нормальные установщики "без задних мыслей" никогда не стесняются попросить ОС дать ей чуточку привилегий, чтобы избавить всех от лишних проблем и правильной установки ПО Можно, конечно, попробовать пойти другим путём и повышать права самостоятельно через ShellExecEx, запоминать от имени какой учетной записи был изначально запущен процесс установки. Но выглядит это довольно странно 1. RequestExecutionLevel user 2. 3. Распаковть ShellExecEx.nsh в папку со своим скриптом установщика 4. При запуске установщика определяем тип учетной записи и имя пользователя, если нужно для дальнейших извращений - где-нибудь сохраняем 5. В нужном месте запускаем сами себя с просьбой о повышении прав Дальше делайте что хотите...Закрывайте оригинальный процесс под Васей не админом, проверяйте статус процесса и т.д. Могу предположить, что такой метод, как вариант, может использоваться в установщике, где только 1 выборочный компонент из 10 требует повышения прав и не всегда необходимо тыкать пользователю о необходимости админских прав Или я тут жути нагнал и не понял, о чем вы? |
||
------- Отправлено: 20:55, 01-02-2021 | #2551 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
… 3. Антон (админ) => RequestExecutionLevel admin => В скрипте: Антон (IsUserAdmin == 1) — так должно работать? |
|
Отправлено: 22:25, 01-02-2021 | #2552 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
|
|
------- Отправлено: 22:41, 01-02-2021 | #2553 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать K.A.V., спасибо, ясно.
|
Отправлено: 22:54, 01-02-2021 | #2554 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать Не могу сообразить! Подскажите, пожалуйста.
Нужно найти строку, например, 127.0.0.1 www.somesite.net в файле hosts и если строка существует, выполнить действие не связанное ни с найденной строкой, ни с самим файлом. |
Отправлено: 17:16, 02-02-2021 | #2555 |
Пользователь Сообщения: 91
|
Профиль | Отправить PM | Цитировать Цитата Kopejkin:
|
|
Отправлено: 17:41, 02-02-2021 | #2556 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата Begin2Fly:
Лучше использовать NewTextreplace плагин (поддерживает utf-8, utf-16LE / BE и все ANSI) : В плагине ещё много полезных функций и ключей. |
|
Последний раз редактировалось MKN, 04-02-2021 в 12:08. Отправлено: 12:00, 04-02-2021 | #2557 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Подскажите пожалуйста, как лучше (и попроще) реализовать такую задачу ? :
На кастомной странице есть созданное новое окно или область ListBox + разные элементы (чекбоксы, кнопки...). Необходимо, при наведении указателя мыши или курсора на какой либо элемент(например на чекбокс) послать в это окно или ListBox(отобразить в нём) некую информацию (из переменной) на время "наведения" (если указатель перемещён с элемента, инфа исчезает). Нечто по аналогии с выводом ToolTips, только не во всплывающем окне, а в имеющемся. ps Попутно вопрос - в ToolTip плагинах (ToolTips.dll или nsTips от kotkovets ) всплывающее сообщение через некоторое время закрывается-исчезает. Можно ли этого избежать ? (Т.е., пока курсор или указатель мыши находятся на элементе, сообщение "удерживается" на месте.) |
Последний раз редактировалось MKN, 05-02-2021 в 13:47. Отправлено: 13:35, 05-02-2021 | #2558 |
Пользователь Сообщения: 52
|
Профиль | Отправить PM | Цитировать K.A.V., здравствуйте. Спасибо за разложенный по полочкам ответ. Все просто и в доступной форме.
Я сумел связаться с человеком из-за фразы, которого произошел весь этот сыр - бор. Напомню ее: "Для инсталлятора с высокими правами, который будет применяться в системах с включенным UAC не существует железного способа автоматической отмены установки, если пользователь оказался с малыми правами. Это закончилось в эпоху ХР". Я дал ссылку на мои попытки объяснить. Вот его ответ. В начале были смайлы смеха: "Настаиваю! Невозможно сделать установщик с высокими правами с предоставленными примерами кодов , чтобы запустил его бесправный пользователь при включенном UAC и всплыло инф. сообщение "Нет прав администратора. До свидания !", после которого последовала бы команда quit и произошло завершение. Такое с включенным UAC сделать не возможно. Система переберет права на себя и чихать она хотела на ваше написанное MessageBox MB_OK "Нет прав администратора. До свидания !" и следующее за ним quit. Такой фокус закончился в ХР. Ты в теме не верно задал вопрос, следовательно получил множество толкований не по сути. А суть я выше описал. Тебе должны были кратко ответить, что никакого сообщения и завершения с включенным UAC не будет. Точка. А тебе начали рассказывать о принципах работы контроля учетных записей. Я сейчас "на пальцах" тебе докажу, что те коды не рабочие и рабочие. В зависимости, что подразумевать под термином "рабочие". И так. Первый пример. Если ты в код пишешь проверку на "бесправного" с сообщением и завершением, а "бесправный" с включенным UAC сообщение не увидит, и завершение не произойдет значит код не исполнил записанные в нем действия. Код не рабочий. Точка. Второй пример. Если ты в код пишешь проверку на "бесправного" с сообщением и завершением и система правильно определила "бесправного", но проигнорировала заложенное в коде сообщение и завершение, тем самым дав возможность продолжить установку от админа, с условием, что запись админа не под паролем. Система предусмотрела, что админ с отсутствием пароля может доверять "бесправному". Код рабочий. Точка. Умная система игнорирует примитивный код." Лично я все понял. Действительно доступно и без высоких материй. А я считал, что этот человек совсем не умеет объяснять. Вопрос закрыт. |
Отправлено: 15:37, 05-02-2021 | #2559 |
Ленивый кусок мяса Сообщения: 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 | #2560 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 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 |
|