Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Посмотри на даты комментов. Многое уже изменилось. Да и вообще - никогда не верь комментам, пока не проверишь сам
Зря я эту ссылку дал... »
Да скорее это я зря эту тему поднял.
Получается нет "бесшумного" способа подправить файл hosts.
И вообще в целом блокирнуть адрес сайта, не нарвавшись на УГ-антивири, UAC и прочую фигню.
Просто есть один говёный сайт, ворующий мою программу... Они устанавливают прогу, модифицируют её и перепаковывают. Мне это не нравится. И я хотел всем своим юзерам к этому сайту доступ закрыть. Но значит не судьба.
Получается нет "бесшумного" способа подправить файл hosts. »
Ну как же нет ? :) Как править строки в hosts рассказал K.A.V.
"Отобрать" файл hosts у системы (W7 и выше) - способов навалом. От классического командного, типа
nsExec::exec 'takeown.exe /F "$SYSDIR\drivers\etc\hosts"' ; текущий пользователь становится владельцем файла
nsExec::exec 'icacls.exe "$SYSDIR\drivers\etc\hosts" /grant $UserName:F /T' ; полный доступ текущего пользователя к файлу
как получить $UserName - тоже куча способов
от обычных ExpandEnvStrings $UserName %username%
до API_шных - GetUserName
Примеров - море
Для получения разных вариантов доступа есть плагин - AccessControl. Выбирай и пробуй...
Боишься беспокойства от UAC- есть и плагин, есть и другие способы
Если антивирь защищает hosts - ну предупреди ты в нужный момент, пользователя сообщением, что делать в таком случае. (именно так поступают авторы многих патчей, затрагивающих заодно и несчастный hosts ... ),
Зачем придумывать проблемы, когда всё давно уже решено... :)
А этот плагин может задать брендмауэру блокировку сайта?
Он юникод поддерживает. Только я не понимаю какое правило использовать
http://nsis.sourceforge.net/LiteFirewall_Plugin
Serg866,
У LiteFirewall Plugin всего два правила :
Добавление приложения в список исключений брандмауэра Windows - liteFirewall::AddRule
Удаление приложения из списка исключений брандмауэра Windows - liteFirewall::RemoveRule
MKN
Ну окей, тогда с помощью этого плагина как задавать блокировку сайта?
Может ради этого на ANSI перейду.
http://nsis.sourceforge.net/NSIS_Simple_Firewall_Plugin
Плохо что в справочнике нет ничего на эту тему.
с помощью этого плагина как задавать блокировку сайта?
Плохо что в справочнике нет ничего на эту тему. »
Зачем это в справочнике, всё ведь уже расписано в доках к плагинам ?
Simple_Firewall_Plugin похоже не блокирует отдельные сайты. Детально не изучал...
А почему разонравился способ редактирования HOSTS ? :)
Нужный адрес добавляется без проблем.
Ессно, ничего не получится, если hosts защищён антивирусом.
Поэтому и надо, перед установкой твоей программы - сообщить пользователю, что делать !
Т.е. , если установлен антивирус, определить какой это антивирус, и дать пользователю в сообщении пошаговые рекомендации, как в настройках антивируса проверить, включена ли защита hosts, и как её отключить.
Хорошо бы для каждого типа антивируса - своё сообщение. Или хотя бы для нескольких основных антивирей. (Можно сделать и для всех, не велик труд, и на будущее пригодится. )
:)
Или в readme программы указать (пример из какой то проги) :
Важно!: Некоторые антивирусные программы, включая Essential Microsoft Security (Windows Defender) не позволяют модифицировать хост файл из предосторожности.
Это сделано для предотвращения модификации хост файла вирусами, шпионским или вредоносным ПО.
Если вы столкнулись с этой проблемы, необходимо временно отключить антивирусное программное обеспечение или отключить защиту хост-файла.
Как определить , какой антивирус установлен в ОС :
;http://nsis.sourceforge.net/WMI_header
OutFile AntiVirusProduct.exe
!include WMI.nsh
Section
${WMIGetInfo} root\SecurityCenter2 AntiVirusProduct displayName Info
SectionEnd
Function Info
MessageBox MB_OK "Установлен : $2"
FunctionEnd
в Windows XP надо использовать SecurityCenter (а не SecurityCenter2 ! )
Можно обойтись и без WMI.nsh. Просто использовать в скрипте команду для wmic.
Я такой скрипт не потяну. Очень много всего надо определять.
И плюс результат всё равно не стоит свеч.
Один фиг у людей будут антивири ругаться.
Одно дело, когда какой-то левый антивирь срабатывает у 2 человек из 100, а тут у каждого второго будет срабатывать. Слишком рисковано...
ZaxBoys66
18-02-2016, 21:19
NSIS Check Defrag Disk
NSIS used command line check,defrag disk and clean History,Cookies browsers,empty recycle bin
NSIS used command line to shutdown,restart,sleep,hibernate PC
NSIS Download files with async progressbar
Kopejkin
20-02-2016, 16:39
Какие требования предъявляются к bmp-изображениям, чтобы на создаваемой nsDialogs страничке их (изображений) фон был бы прозрачен?
Kopejkin, попробуйте использовать 32-бит изображения Bitmap. 32-бит Bitmap - это стандартное растровое изображение с глубиной 24-бит, плюс альфа-канал (прозрачность) с глубиной 8-бит (24+8=32). Обычный редактор изображений Microsoft Paint поддерживает создание и запись изображений в формате BMP только с глубиной 24-бит. Поэтому для получения 32-бит Bitmap изображений воспользуйтесь программами сторонних разработчиков, например, Axialis IconWorkshop, Paint.Net с плагином BMPX и др.
Альтернативный вариант (в теории) — это использовать вместо BMP формат ICO (и соответственно макрокоманду ${NSD_CreateIcon} вместо ${NSD_CreateBitmap}). При этом предварительно конвертируйте ваши изображения в 32-бит формат ICO.
Dodakaedr
21-02-2016, 09:47
Есть такой макрос !define ANSIToUTF8 "!insertmacro ANSIToUTF8"
!macro ANSIToUTF8 SOURCE_STRING OUTPUT_STRING
Push `${SOURCE_STRING}`
System::Store SR2
System::Call "kernel32::MultiByteToWideChar(i0,i0,tR2,i-1,i0,i0)i.R1"
IntOp $R1 $R1 * 2
System::Alloc $R1
Pop $R0
System::Call "kernel32::MultiByteToWideChar(i0,i0,tR2,i-1,iR0,iR1)"
System::Call "kernel32::WideCharToMultiByte(i65001,i0,iR0,i-1,t.s,iR1,i0,i0)"
System::Free $R0
System::Store L
Pop `${OUTPUT_STRING}`
!macroend
Можно его как-то сделать противоположным? То есть UTF8ToANSI.
Вопрос снят. Нашел Utf8Converter (http://nsis.sourceforge.net/Utf8Converter)
Dodakaedr
21-02-2016, 10:43
Помогите, пожалуйста, разобраться с ini файлом. Не определяется секция и при записи нового значения создается дубль секции.
Dodakaedr, NSIS не умеет работать с INI-файлами в кодировках отличной от ANSI. А ваш файл INI имеет кодировку UTF-8. По этой причине и получается ошибка. Воспользуйтесь плагином Unicode для преобразования кодировок. Примерный код сценария будет следующий:
# Обработка INI-файлов кодировке UTF-8
# Используемые плагины:
# - Unicode v1.1 (http://nsis.sourceforge.net/Unicode_plug-in)
# - EnumINI (http://nsis.sourceforge.net/EnumINI_plug-in)
outfile "TestINI.exe"
Section main
; Выполняем конвертацию исходного файла INI из кодировки UTF-8 в ANSI
; во временный файл с именем _Config.ini
unicode::FileUnicode2Ansi "$EXEDIR\Config.ini" "$EXEDIR\_Config.ini" AUTO
; Извлекаем из стека результат обращения к функции
Pop $1
; Проверяем наличие в INI-файле секции с именем "General"
EnumINI::SectionExist "$EXEDIR\_Config.ini" "General"
; Извлекаем из стека результат обращения к функции
Pop $1
; Выполняем сравнение значения переменной $1 с "1"
StrCmp $1 "1" 0 +6
; Если результат сравнения положительный (секция существует), то...
; Показываем уведомление пользователю
MessageBox MB_OK|MB_ICONINFORMATION "Указанная секция существует."
; Записываем во временный новый INI-файл значение для заданного ключа
WriteINIStr "$EXEDIR\_Config.ini" "General" "RutaBaseExtraccion" "$EXEDIR\"
; Выполняем конвертацию временного файла INI из кодировки ANSI в UTF-8
; и перезаписываем исходный файл INI
unicode::FileAnsi2Unicode "$EXEDIR\_Config.ini" "$EXEDIR\Config.ini" UTF-8
; Извлекаем из стека результат обращения к функции
Pop $1
; Переходим на команду удаления временного файла INI (_Config.ini)
Goto +2
; Если результат сравнения отрицательный (секция НЕ существует), то...
; Показываем уведомление пользователю
MessageBox MB_OK|MB_ICONSTOP "Указанная секция не существует!!!"
; Удаляем временный файл INI, он больше не нужен.
Delete "$EXEDIR\_Config.ini"
SectionEnd
Рекомендую ввести дополнительные проверки как, например, наличие самого файла INI и результатов конвертирования.
К сожалению, оба используемых плагина сделаны в редакции ANSI, поэтому пользоатели NSIS Unicode оказываются в пролёте.
К сожалению, оба используемых плагина сделаны в редакции ANSI, поэтому пользоатели NSIS Unicode оказываются в пролёте. »
Не пробовал никто CallAnsiPlugin plug-in (http://nsis.sourceforge.net/CallAnsiPlugin_plug-in)?
А возможно как то отключить автоматический detailprint таких команд как rename и delete?
Привет.
Нужно реализовать такую функцию:
проверка подключения к интернету и если подключение активно,
то автоматически открывается браузер и переходит на заданный url
Пожалуйста помогите реализовать эту задачу.
С уважением, Serg866
проверка подключения к интернету »
Самое простое - использовать штатный плагин Dialer (он уже входит в "боксовый пакет" NSIS)
Dialer::GetConnectedState
Pop $1
MessageBox MB_OK "$1"
Если интернет есть, то в $1 - online
если нет, то в в $1 - offline
Можно также использовать (но совершенно ни к чему) :
; http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa384702(v=vs.85).aspx
System::Call 'wininet.dll::InternetGetConnectedState(*i .r0, i 0) i.r1'
IntFmt $R1 "0x%X" "$0" ; (connection in hex)
MessageBox MB_OK "$1 $R1 "
; есть сеть - $1 == 1
; нет - $1 == 0
; $R1 - описание соединения: Modem=0x01, LAN=0x02, Proxy=0x04, RAS=0x10, Offline=0x20 Configured=0x40 и др
; также в $R1 может быть результат сложения разных сочетаний... Например :
; Значение 0x12 представляет собой сочетание INTERNET_CONNECTION_LAN (0x02) и INTERNET_CONNECTION_RAS_INSTALLED (0x10)
Далее для твоей задачи, обыкновенная логика и открытие нужного url
MKN. Красава! То что надо.
С проверкой я понял, а команду для открытия url как прописывать?
если что у меня в скрипте один url уже есть (линк на созданной странице)
kotkovets
10-03-2016, 09:09
команду для открытия url как прописывать? »
через shell.
ExecShell "open" "http://nsis.sf.net/"
Коллеги, попутно ещё такая задачка.
Надо прописать удаление с раб.стола папки, в имени которой есть пробел и плюс название на кириллице.
Условно это вот так выглядит
RMDir /r $DESKTOP\Моя папка
И конечо не работает, ругается при компиляции из-за пробела.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC