.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 56
Аватара пользователя
Sancho5555

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Sancho5555 »

K.A.V.,

- Поиск нужной кнопки по тексту на кнопке, не годится для случаев, когда никакого текста нет... Т.е. когда на кнопке - скин-картинка с текстом (OK, Cancel и т.п. ).

Такое встречается очень часто. Особенно в окнах, назовём их тактично, так : "продуктов сопровождения для разных приложений" Изображение. Там же , как правило, отключены и табы и др. Нужно поизгиляться для перемещения между разными элементами (комбобоксы с выпадающими списками, разные текстовые поля, кнопки и пр. )

Такие "приложения" - отличный полигон для изучения-применения возможностей NSIS Изображение



А ещё, совершенно не понятно, как с помощью NSIS можно кликать кнопками в окнах с IEFrame (в инсталляторах Corel и др ).

Для AutoIt для этого вроде как есть специальная библиотека. чего делать в NSIS, не ясно...




Цитата Dodakaedr:



существует ли плагин или макрос по работе с фаерволом (добавление, удаление и проверка правил)?
.: NSIS - все вопросы :. часть 2.




http://nsis.sourceforge.net/NSIS_Simple_Firewall_Plugin


http://nsis.sourceforge.net/LiteFirewall_Plugin




или использовать команды из скрипта :

http://webistore.ru/administrirovani...andnoj-stroke/
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Парни, вас приветствует Serg866.



Возникла нестандартная задача, нужно проверить содержимое текстового файла.

По принципу: если есть фраза "version1.1", то один путь установки, если нет - другой путь.

Может примерчики скинете какие-нибудь?

В справке только пример как заменять текст в текстовиках...
Аватара пользователя
ZaxBoys66

Re: .: NSIS - все вопросы :. часть 2.

Сообщение ZaxBoys66 »

Цитата Serg866:



Возникла нестандартная задача, нужно проверить содержимое текстового файла.
.: NSIS - все вопросы :. часть 2.




Увы, сейчас нет nsis'а под рукой...

Тут посмотри =>
http://nsis.sourceforge.net/WordFind


И в теме тоже были примеры использования ${WordFind}.
Аватара пользователя
Dodakaedr

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Dodakaedr »

Цитата Serg866:



нужно проверить содержимое текстового файла.

По принципу: если есть фраза "version1.1"
.: NSIS - все вопросы :. часть 2.




самое простое - NewTextReplace NSIS plugin

работает и с ANSI и с UNICOD
Аватара пользователя
Dodakaedr

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Dodakaedr »

Цитата Serg866:



По принципу: если есть фраза "version1.1", то один путь установки, если нет - другой путь.
.: NSIS - все вопросы :. часть 2.





Цитата Serg866:



Задача искать заданное слово во всём текстовом файле, независимо ни от количества строк, ни от чего.
.: NSIS - все вопросы :. часть 2.




Нужно зациклить. В теме есть примеры. На их основе накидал. Опять же без 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
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата Serg866:



Не хотелось бы плагины подключать сторонние.
.: NSIS - все вопросы :. часть 2.




Какие же это сторонние плагины ? Самые что ни на есть родные - NSIS_овские, которые просто обязаны быть у пользователя. Изображение

Что за проблема, добавить к имеющейся куче "боксовых" плагинов - ещё один или столько, сколько надо, и писать в скрипте одну-две строчки , вместо полутора десятков...



ps Как вариант, можно так :





PHP код:

Код: Выделить всё

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 (начало поиска - почему то с нижней строки)
Аватара пользователя
Salmo

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Salmo »

Добрый день уважаемые... Для фильтрации зависших приложений всегда пользовался к\с - tasklist /fi "status eq not responding", но не везде есть эта утилита. Подскажите, пожалуйста, как на NSIS определять статус приложения, найти зависшее и сделать дальнейшие манипуляции с ним... Спасибо.
Аватара пользователя
Salmo

Re: .: NSIS - все вопросы :. часть 2.

Сообщение Salmo »

Цитата Serg866:



единственная проблема:

если текстовик большого размера (5 мб например), то инсталлер виснет...

Может быть есть решение специально для больших текстовиков?
.: NSIS - все вопросы :. часть 2.




Это что же за задача такая , где надо использовать такие огромные текстовые файлы ? Изображение Неужели более неоткуда взять несчастный номер версии ?

Для больших файлов можно использовать изврат с плагином nsisFile. Искать HEX значение искомой строки , "внутри" файла (version1.1 - берём в шестнадцатиричном виде).

Находит пулей.
Аватара пользователя
K.A.V.

Re: .: NSIS - все вопросы :. часть 2.

Сообщение K.A.V. »

Цитата Serg866:



если текстовик большого размера (5 мб например),

то инсталлер виснет...
.: NSIS - все вопросы :. часть 2.




Он не виснет, он долго думает

Дело, в общем то, не в размере файла, а в количестве строк, давно всем известная проблема NSIS - он не может с одинаковой скоростью читать каждую строку по мере сдвига от начала, говоря простым языком - при использовании команд типа LineRead происходит замедление скорости чтения в зависимости от позиции читаемой строки

Попробуйте написать код с отображением порядкового номера читаемой строки и вы увидите, сколько примерно строк NSIS будет читать без понижения скорости
Ответить

Вернуться в «Автоматическая установка приложений»