Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
K.A.V.,
- Поиск нужной кнопки по тексту на кнопке, не годится для случаев, когда никакого текста нет... Т.е. когда на кнопке - скин-картинка с текстом (OK, Cancel и т.п. ).
Такое встречается очень часто. Особенно в окнах, назовём их тактично, так : "продуктов сопровождения для разных приложений" :). Там же , как правило, отключены и табы и др. Нужно поизгиляться для перемещения между разными элементами (комбобоксы с выпадающими списками, разные текстовые поля, кнопки и пр. )
Такие "приложения" - отличный полигон для изучения-применения возможностей NSIS :)
А ещё, совершенно не понятно, как с помощью NSIS можно кликать кнопками в окнах с IEFrame (в инсталляторах Corel и др ).
Для AutoIt для этого вроде как есть специальная библиотека. чего делать в NSIS, не ясно...
существует ли плагин или макрос по работе с фаерволом (добавление, удаление и проверка правил)? »
http://nsis.sourceforge.net/NSIS_Simple_Firewall_Plugin
http://nsis.sourceforge.net/LiteFirewall_Plugin
или использовать команды из скрипта :
http://webistore.ru/administrirovaniye-windows/nastrojka-brandmauera-windows-v-komandnoj-stroke/
Парни, вас приветствует Serg866.
Возникла нестандартная задача, нужно проверить содержимое текстового файла.
По принципу: если есть фраза "version1.1", то один путь установки, если нет - другой путь.
Может примерчики скинете какие-нибудь?
В справке только пример как заменять текст в текстовиках...
Возникла нестандартная задача, нужно проверить содержимое текстового файла. »
Увы, сейчас нет nsis'а под рукой...
Тут посмотри => http://nsis.sourceforge.net/WordFind
И в теме тоже были примеры использования ${WordFind}.
нужно проверить содержимое текстового файла.
По принципу: если есть фраза "version1.1" »
самое простое - NewTextReplace NSIS plugin
работает и с ANSI и с UNICOD
Спасибо, господа!
Не хотелось бы плагины подключать сторонние.
Обычно я делаю это только если нельзя решить задачу стандартными средствами НСИС.
Но ${WordFind} что-то сложная штука.
Мне непонятны опции. Задача искать заданное слово во всём текстовом файле, независимо ни от количества строк, ни от чего. Какой параметр надо для этого задать я не пойму.
Что означают параметры +2}}, +2*}, -02, E+1{ и т.д.
По принципу: если есть фраза "version1.1", то один путь установки, если нет - другой путь. »
Задача искать заданное слово во всём текстовом файле, независимо ни от количества строк, ни от чего. »
Нужно зациклить. В теме есть примеры. На их основе накидал. Опять же без NSIS'а... Не могу проверить.
Как-то так...
Section
Call test
${If} $0 == 1
; если фраза найдена
${Else}
; если фраза не найдена
${EndIf}
SectionEnd
Function test
ClearErrors
${LineSum} "$DESKTOP\test.txt" $R0 ; в переменную $R0 заносим количество строк в файле
StrCpy $R1 0 ; обнуляем счетчик
read:
IntOp $R1 $R1 + 1 ; увеличиваем счетчик и читаем следующую строку
IntCmp $R1 $R0 0 0 end ; если значение текущей строки больше, чем общее количество строк в файле - переход на метку end
${LineRead} "$DESKTOP\test.txt" "$R1" $R3 ; читаем содержимое строки
${WordFind} "$R3" "version1.1" "E+1{" $R2 ; ищем фразу в строке
IfErrors read 0 ; если фраза не найдена - переход на метку read
StrCpy $0 1
end:
FunctionEnd
Не хотелось бы плагины подключать сторонние. »
Какие же это сторонние плагины ? Самые что ни на есть родные - NSIS_овские, которые просто обязаны быть у пользователя. :)
Что за проблема, добавить к имеющейся куче "боксовых" плагинов - ещё один или столько, сколько надо, и писать в скрипте одну-две строчки , вместо полутора десятков...
ps Как вариант, можно так :
OutFile "FileReadFromEnd_Test.exe"
!include "TextFunc.nsh"
!include "WordFunc.nsh"
Section
${FileReadFromEnd} "$EXEDIR\MyFile.txt" "Read"
IfErrors 0 +2
MessageBox MB_OK "Error (файл не найден)"
SectionEnd
Function Read
${WordFind} "$9" "version1.1" "E+1{" $1 ; $9-current line * http://nsis.sourceforge.net/FileReadFromEnd
IfErrors notfound found
found:
MessageBox MB_OK 'Found' IDOK end
notfound:
MessageBox MB_OK 'Not found'
end:
Push $0
FunctionEnd
здесь MessageBox - для наглядности результата построчного поиска "version1.1" , в MyFile.txt (начало поиска - почему то с нижней строки)
BuZzOFF, MKN
Ещё раз спасибо, всё разжевали мне.
P.S: нашёл ещё такой вариант
http://nsis.sourceforge.net/Search_for_text_in_file
------------------------------------
единственная проблема:
если текстовик большого размера (5 мб например),
то инсталлер виснет...
Может быть есть решение специально для больших текстовиков?
единственная проблема:
если текстовик большого размера (5 мб например), то инсталлер виснет...
Может быть есть решение специально для больших текстовиков? »
Это что же за задача такая , где надо использовать такие огромные текстовые файлы ? :) Неужели более неоткуда взять несчастный номер версии ?
Для больших файлов можно использовать изврат с плагином nsisFile. Искать HEX значение искомой строки , "внутри" файла (version1.1 - берём в шестнадцатиричном виде).
Находит пулей.
если текстовик большого размера (5 мб например),
то инсталлер виснет... »
Он не виснет, он долго думает
Дело, в общем то, не в размере файла, а в количестве строк, давно всем известная проблема NSIS - он не может с одинаковой скоростью читать каждую строку по мере сдвига от начала, говоря простым языком - при использовании команд типа LineRead происходит замедление скорости чтения в зависимости от позиции читаемой строки
Попробуйте написать код с отображением порядкового номера читаемой строки и вы увидите, сколько примерно строк NSIS будет читать без понижения скорости
Это что же за задача такая , где надо использовать такие огромные текстовые файлы ? Неужели более неоткуда взять несчастный номер версии ?
Для больших файлов можно использовать изврат с плагином nsisFile. Искать HEX значение искомой строки , "внутри" файла (version1.1 - берём в шестнадцатиричном виде).
Находит пулей. »
Ну этот файл - лог закачек. И у каждого юзера этот файл может быть очень большого размера, в зависимости от того сколько контента он скачивал. Вот мне нужно определить наличие в этом логе инфы о скачивании моей программы. Кроме version1.1 там есть ещё название проги.
Попробую nsisFile, благо там есть юникод-версия плагина.
То есть надо определить хекс-значение заданной фразы и прописать это значение, используя nsisFile::FileFindBytes ?
-----------------------
Он не виснет, он долго думает
Дело, в общем то, не в размере файла, а в количестве строк, давно всем известная проблема NSIS - он не может с одинаковой скоростью читать каждую строку по мере сдвига от начала, говоря простым языком - при использовании команд типа LineRead происходит замедление скорости чтения в зависимости от позиции читаемой строки
»
А можно какой-либо прогресс-бар или же просто сообщение типа "ждите" прикрутить на время обработки файла? Чтоб юзер не думал что установщик завис.
P.S: я почему подумал что завис инсталлер - в диспетчере задач процесс стал жрать большое количество ресурсов и я его вырубил.
А можно какой-либо прогресс-бар или же просто сообщение типа "ждите" прикрутить на время обработки файла? Чтоб юзер не думал что установщик завис. »
Можете стандартный баннер заюзать, но он маленький по размеру
Либо используйте другие баннеры типа Nxs plug-in (http://nsis.sourceforge.net/Nxs_plug-in)
Пример с баннером при поиске файлов:
!include "WinMessages.nsh"
!include "FileFunc.nsh"
Name "TEST"
OutFile "TEST.exe"
Function .onInit
Banner::show ""
Banner::getWindow
Pop $R1
GetDlgItem $R2 $R1 1030
${Locate} "$WINDIR" "/L=F" "LocateCallBack"
Banner::destroy
quit
FunctionEnd
Function LocateCallBack
SendMessage $R2 ${WM_SETTEXT} 0 "STR:$R7"
Push $0
FunctionEnd
Section
SectionEnd
То есть надо определить хекс-значение заданной фразы и прописать это значение, используя nsisFile::FileFindBytes ? »
Да
Дорогие знатоки NSIS и конечно маэстро K.A.V., хочу у вас проконсультироваться относительно файла hosts
То, что мне нужно описано вот в этом примере :
http://forum.oszone.net/post-2507451-1625.html
А вопрос следующий: как такую операцию с изменением файла hosts проделать "втихарца", чтобы ни антивирусы, ни сама система не ругались? Ведь файл-то системный и по сути один из ключевых...
И сопутствующие вопросы - имеет ли значение версия системы 32-битная или 64-битная?
И важен ли тут атрибут RequestExecutionLevel admin, который прописываю в скрипте?
Ну и быть может есть альтернативные способы как заблокировать доступ к сайту с помощью NSIS (без редактирования файла hosts)?
Заранее спасибо, коллеги.
Ведь файл-то системный »
Надо стать владельцем файла, получить к нему полный доступ. Версия ОС значения не имеет. RequestExecutionLevel - в зависимости от задачи.
быть может есть альтернативные способы как заблокировать доступ к сайту с помощью NSIS (без редактирования файла hosts)? »
Командой из скрипта создать правило для брандмауэра. На предыдущей страницы уже была ссылка на примеры.
Насчёт ругани антивирусов - это уже сам пользователь пусть укрощает "дурость" своего антивируса. Против дури лекарства нет... :)
Надо стать владельцем файла, получить к нему полный доступ. Версия ОС значения не имеет. RequestExecutionLevel - в зависимости от задачи. »
Задача с помощью NSIS заблокировать всем браузерам доступ к одному конкретному сайту.
Ну а как получить доступ? Недостаточно того что инсталлер запускается из под администратора?
Командой из скрипта создать правило для брандмауэра. На предыдущей страницы уже была ссылка на примеры.
Насчёт ругани антивирусов - это уже сам пользователь пусть укрощает "дурость" своего антивируса. Против дури лекарства нет... »
Как правило мало кто укрощает антивирус.
Обычно сразу закрывают прогу и спешно удаляют её.
NSIS Simple Firewall Plugin не поддерживает юникод, а мне нужен юникод
LiteFirewall Plugin вроде не может добавлять блокировку сайта.
Команды из скрипта я не разобрал, но там сразу написано что документация для всех новых систем. А мне надо чтобы и в XP тоже работала блокировка сайта.
Недостаточно того что инсталлер запускается из под администратора? »
Для XP достаточно. Для старших ОС - нет.
Ну а как получить доступ? »
Есть плагины, есть системные команды.
Как правило мало кто укрощает антивирус. Обычно сразу закрывают прогу и спешно удаляют её. »
Мало кто из разработчиков ПО предупреждает пользователей о возможной неадекватной реакции антивируса на их продукт. И тем более никто не даёт внятных рекомендаций, что пользователю делать. Это - хреновые разработчики, раз им плевать, что их продукт сразу же будет удалён из за тупости какого то антивируса... Да и пользователи такие же...
Если с Firewall_ами не получается, используй записи в hosts.
ps Попробуй запускать из скрипта - Hosts Commander
Это гораздо лучше, чем горожа из NSIS кода.
http://code.google.com/archive/p/hostscmd/
http://habrahabr.ru/post/109180/
ps Попробуй запускать из скрипта - Hosts Commander
Это гораздо лучше, чем горожа из NSIS кода.
http://code.google.com/archive/p/hostscmd/
http://habrahabr.ru/post/109180/ »
Спасибо.
Hosts Commander вроде подходит.
Но опять же как на него реагируют системы старше XP и основные антивири.
Бьют тревогу или нет. Может кто юзал?
upd: почитал комменты на хабре.
Не буду юзать...
upd: почитал комменты на хабре.
Не буду юзать... »
Посмотри на даты комментов. Многое уже изменилось. Да и вообще - никогда не верь комментам, пока не проверишь сам :)
Зря я эту ссылку дал...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC