Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
вот что выдает ваш код »
мой код выдаёт что и должен (для ANSI)
http://s61.radikal.ru/i174/1611/b4/d709f31deae1.jpg
Для UNICOD используй функцию FileReadUnicode или, что ещё лучше, соответствующий плагин.
В справке статья называется "Замена строки в текстовом файле." »
Хмм... См. статью "Замена фразы в текстовом файле"
.Земляк.
25-11-2016, 16:00
вопрос к знатокам правильный или нет синтаксис проверки 2х значений
....
md5dll::GetMD5File "${DLL}" ; вычисляем MD5
Pop $R1
IntCmp $R1 "${MD5}" next 0 0 ; если MD5 равно 1му значению
IntCmp $R1 "${PATCH_MD5}" next Done Done ; если MD5 равно 2му значению
Done:
MessageBox MB_OK "Модифицирован или другой версий патч не будет установлен.$\r$\n$\r$\nПодерживаемая версия ${PRODUCT_VERSION}"
Goto end
next:
....
если значение сходится по одну из значений продолжить установку
Ребят, подскажите как исправить ложный детект антивирусов установщика NSIS, провел кучу экспериментов, тупо на пустой инсталл три детекта (https://virustotal.com/ru/file/eb5ba01f8e4f3a4ac1a506b8d97a4c09d33a976e7f4092e589ce161bfcdaa225/analysis/1480102015/), все время одни и те же пассажиры недовольны:
Bkav HW32.Packed.3558 20161125
McAfee-GW-Edition BehavesLike.Win32.Dropper.hh 20161125
Qihoo-360 HEUR/QVM20.1.0000.Malware.Gen 20161125
Как это обойти? Может есть какие то упаковщики, протекторы или еще какие то варианты?
как исправить ложный детект антивирусов установщика NSIS »
Отправляешь файл в службу поддержки соответствующего антивируса и говоришь, что это ложное срабатывание. Они проверяют твой файл и выносят вердикт: действительно ложное срабатывание или нет. Если вина с их стороны, то в течении суток/двое в вирусные базы вносится исправление.
Из личного опыта общения:
Qihoo-360 - работают оперативно. Обычно отвечают в течении суток; :good:
McAfee-GW-Edition - реагируют в течении месяца, может и более. Вообще у них политика - ты должен быть их клиентом, купить подписку и зарегистрироваться на их сервисе. Короче клиентов они обрабатывают в первую очередь, всех остальных в порядке живой очереди; :read:
Bkav - вьетнамская антивирусная лаборатория. До них я так и не достучался, то ли английского не понимают, то ли гуглоперевод на вьетнамский. :insane:
Если часто собираешь несколько различных инсталляторов (не один или два в месяц), то естественно никакого терпения не хватит воевать с ложными срабатываниями. Поэтому, например, попробуй использовать UPX, но не последней версии (3.09.1!), а, например, 3.08. Я остановился на версии 1.20, не всегда, но в большинстве случаев помогает.
Также разный результат получается при установке различных режимов компрессии (ZLib, BZip2, LZMA), отключение Админправ, а также изменение других параметров инсталлятора.
Но если инсталлятор действительно содержит какую-то заразу, то вряд ли удастся её замаскировать.
Flix судя по поиску в гугле история с некотороми антивирусами не новая, а очень старая, и до сих пор не профиксена...
Подскажите, пожалуйста, как сделать...
К примеру, есть текстовый файл со списком программ и версий.
Файл этот хранится в интернетах и обновляется разработчиком с выходом новых версий.
"Название №1"; "Версия: 1.0"
"Название №1"; "Версия: 1.2"
"Название №1"; "Версия: 3.0"
"Название №2"; "Версия: 5.0"
"Название №2"; "Версия: 7.2"
"Название №3"; "Версия: 1.5"
"Название №4"; "Версия: 1.8"
Все они циклом считываются и добавляются в ListView (к примеру, как тут (http://forum.oszone.net/post-2529707-1681.html)). 1 программа, 1 строчка.
Как отфильтровать так, чтоб добавлялась только последняя версия каждой программы.
Никак не могу сообразить...
NSIS 3.01 (http://nsis.sourceforge.net/Docs/AppendixF.html#v3.01)
nsis-3.01-setup.exe (http://prdownloads.sourceforge.net/nsis/nsis-3.01-setup.exe)
Begin2Fly
12-12-2016, 12:24
NSIS 3.01 »
С каждым разом всё хуже... Теперь даже сорсфорж ругается..
http://funkyimg.com/i/2kQHx.png (http://funkyimg.com/i/2kQHy.png)
Как отфильтровать так, чтоб добавлялась только последняя версия каждой программы. »
Предположим у нас есть файл list.txt со списком одноимённых приложений разных версий :
Camera Raw CC 9.6 win32
Camera Raw CC 9.6.1 win32
Camera Raw CC 9.6.2 win32
Прочтём его и отфильтруем версии (как вариант) :
OutFile NewVerFilter.exe
!include "LogicLib.nsh"
!include "TextFunc.nsh"
!include "WordFunc.nsh"
Var /global Str
Var /global Ver
Var /global SumVer
Var /global Ver1
Var /global Ver2
Var /global Ver3
Section
FileOpen $R4 "$EXEDIR\list.txt" r
IfErrors done
ClearErrors
${LineSum} "$EXEDIR\list.txt" $8 ; количество строк в list.txt
StrCpy $3 0
${Do}
IntOp $3 $3 + 1 ; нумерация читаемых строк
${LineRead} "$EXEDIR\list.txt" "$3" $Str ; читаем строку № $3
;MessageBox MB_OK|MB_ICONINFORMATION "$3 -$Str "
${If} $Str == ""
Goto Next
${EndIf}
; выбираем версию из названия приложения
${WordFind2X} "$Str" " " "" "-3}}" $Ver
StrCpy $Ver $Ver -9 ; отсекаем n символов от конца (n-количество, в зависимости от того, как построен список приложений)
;MessageBox MB_OK|MB_ICONINFORMATION "$Ver"
StrCpy $SumVer "$SumVer$Ver-" ; собираем все версии в одну переменную, добавив разделитель -
Next:
${If} $3 > $8 ; если номер текущей строки > кол-ва строк - выход из цикла
${ExitDo}
${EndIf}
${Loop}
done:
FileClose $R4
MessageBox MB_OK|MB_ICONINFORMATION "Все версии: $SumVer" ; 9.6-9.6.1-9.6.2-
; разделяем версии для дальнейшего сравнения
${WordFind} "$SumVer" "-" "+1" "$Ver1" ;
${WordFind} "$SumVer" "-" "+2" "$Ver2" ;
${WordFind} "$SumVer" "-" "+3" "$Ver3" ;
MessageBox MB_OK|MB_ICONINFORMATION "$Ver1$\r$\n$Ver2$\r$\n$Ver3"
;далее последовательно сравниваем и оставляем только самую новую версию :
${VersionCompare} "$ver1" "$ver2" $R0
;если $R0=0 - Версии равны
;если $R0=1 - $ver1 новее
;если $R0=2 - $ver2 новее
MessageBox MB_OK|MB_ICONINFORMATION "$R0"
; и далее логика сравнения версий и оставление более новой....
SectionEnd
Если в списке разноимённые приложения, сначала последовательно выбираем версии в каждом из одноимённых приложений. Вариантов много.
MKN, спасибо, конечно. Но это всё же немного не то...
Как я понимаю это будет работать только если известно кол-во приложений в списке.
Var /global Ver1
Var /global Ver2
Var /global Ver3 »${WordFind} "$SumVer" "-" "+1" "$Ver1" ;
${WordFind} "$SumVer" "-" "+2" "$Ver2" ;
${WordFind} "$SumVer" "-" "+3" "$Ver3" ; »
Загвоздка в том что это как раз таки и не известно. Список обновляется.
это будет работать только если известно кол-во приложений в списке. »
Можно сначала посчитать все приложения и записать их в промежуточный временный файл, с которым потом и работать.
Т.е. - есть список с непредсказуемымм составом и количеством приложений. Читаем его и создаём временные файлы одноимённых приложений.
Далее с этими файлами работаем. Это будет ещё проще, чем "загонять" данные в переменные.
MKN, спасибо за наводку. Я куда-то не в ту степь думал... Всё оказалось проще.
Ток не файлами сделал, а с nsArray. Но принцип тот же.
не файлами сделал, а с nsArray »
Действительно, уже всё давно придумано. :)
Даже есть пример - nsArray_VersionSort.nsi на http://forums.winamp.com/showthread.php?t=330425
где каша из версий выстраивается в возрастающую последовательность версий.
Интересный плагин http://nsis.sourceforge.net/File:NsArray.zip
Но уж очень мутный в освоении... Добавить бы в Справочник практических примеров с этим плагином ...
Но наши NSIS-гуру к сожалению тему и форум почему то забросили...
Подскажите, пожалуйста, можно ли заблокировать один из элементов ListView? »
Намедни нужно было реализовать подобную задачу. Решил с помощью плагина EmbeddedLists (http://nsis.sourceforge.net/EmbeddedLists_plug-in).
http://i12.pixs.ru/storage/4/2/5/ListViewpn_1108975_24507425.png
Вместе с плагином поставляются примеры использования, смотрите в них что да как.
Flix, спасибо! Чуть позже гляну.
Если мне не изменяет память (http://forum.oszone.net/post-2529509-1680.html), этот плагин работает на IO.
Ребят, подскажите как добавить полосу прокрутки текста на свою страницу, созданную в NsDialogs?
Begin2Fly
13-01-2017, 03:37
Ребят, подскажите как добавить полосу прокрутки текста на свою страницу, созданную в NsDialogs? »
Добавить к контролу стиль ${WS_VSCROLL} или ${WS_HSCROLL} для вертикальной и горизонтальной полос прокруток соответственно.
ZaxBoys66
13-01-2017, 13:09
# Copyright CatsSoft
# ...:: INFO ::... #
Name "iTEST"
OutFile "iTEST.exe"
InstallDir "$TEMP\iTEST"
# ...:: COMPRESS ::... #
SetCompressor /SOLID /FINAL lzma
# ...:: RUN ::... #
RequestExecutionLevel user
# ...:: SHOW / HIDE ::... #
ShowInstDetails nevershow
ShowUninstDetails NeverShow
# ...:: INCLUDES ::... #
!include "MUI2.nsh"
!include "WinCore.nsh"
!include "nsDialogs.nsh"
!include "LogicLib.nsh"
!include "WinMessages.nsh"
!include "FileFunc.nsh"
# ...:: BRANDING ::... #
BrandingText /TRIMRIGHT " "
# ...:: PAGE ::... #
Page custom page1.create
Page instfiles
# ...:: LANGUAGES ::... #
!insertmacro MUI_LANGUAGE "English" # first language
# ...:: INIT ::... #
Function .onInit
FunctionEnd
# ...:: PAGE 1 ::... #
Function page1.create
# ...:: VARIABLES ::... #
var /GLOBAL Dialog
var /GLOBAL Path.READ
var /GLOBAL PATH.FILE
var /GLOBAL Btn_Add
var /GLOBAL Btn_Read
GetDlgItem $0 $HWNDPARENT 1
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 2
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 3
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1990
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1991
ShowWindow $0 ${SW_HIDE}
GetDlgItem $0 $HWNDPARENT 1992
ShowWindow $0 ${SW_HIDE}
System::Call "user32::SetWindowPos(i$HWNDPARENT,i,i,i,i 632,i 466,i 0x16)"
nsDialogs::Create /NOUNLOAD 1044
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
System::Call "user32::MoveWindow(i$Dialog,i0,i0,i 632,i 466,i0)"
# ...:: PATH FILES ::... #
nsDialogs::CreateControl /NOUNLOAD EDIT 0x40000000|0x10000000|0x04000000|0x00010000|0x00000080 0 2% 5% 79% 15u ""
Pop $PATH.FILE
CreateFont $0 "$(^Font)" "12" "100"
SendMessage $PATH.FILE ${WM_SETFONT} $0 0
# ...:: BUTTON ADD FILES ::... #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 82% 5% 65u 15u ""
Pop $Btn_Add
Strcpy $1 $Btn_Add
GetFunctionAddress $3 "on.Click.Add.Files"
nsDialogs::onClick /NOUNLOAD $1 $3
SendMessage $Btn_Add '${WM_SETTEXT}' '0' "STR:$(^BrowseBtn)"
# ...:: LOCATION OF READ ::... #
nsDialogs::CreateControl /NOUNLOAD EDIT 0x40000000|0x10000000|0x04000000|0x00010000|0x00000080|0x00000004|0x00200000|0x00100000|0x00000800 0 2% 15% 96% 190u "" # 0x00000100|0x00000200
Pop $PATH.READ
CreateFont $0 "$(^Font)" "12" "100"
SendMessage $PATH.READ ${WM_SETFONT} $0 0
# ...:: BUTTON READ ::... #
nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 145u 245u 120u 25u "Read Now ..." ; Read
Pop $Btn_Read
StrCpy $1 $Btn_Read
GetFunctionAddress $3 "On.Click.Read.Files"
nsDialogs::onClick /NOUNLOAD $1 $3
CreateFont $0 "$(^Font)" "12" "100"
SendMessage $Btn_Read 0x0030 $0 0
nsDialogs::Show
FunctionEnd
# ...:: ADD FILES ::... #
Function "on.Click.Add.Files"
var /GLOBAL MYFILES
nsDialogs::SelectFileDialog /NOUNLOAD "open" "C:\" "Files|*.txt;*.ini;*.pls;*.m3u;*.bat;*.nsi;*.nsh;*.dat;*.htm;*.html;*.css;*.js;*.xml;*.rtf;*.log;*.re g;*.lng;*.data;*.json|*.*"
Pop $0
StrCpy $MYFILES "$0"
${NSD_SetText} $PATH.FILE "$MYFILES"
FunctionEnd
# ...:: READ FILES ::... #
Function "On.Click.Read.Files"
FileOpen $4 "$MYFILES" r
loop:
FileRead $4 $1
SendMessage $PATH.READ ${EM_REPLACESEL} 0 "STR:$1"
IfErrors +1 loop
FileClose $4
FunctionEnd
# ...:: SECTION ::... #
Section "Main" SEC01
SectionEnd
# ...:: END PAGE ::... #
Function .onGUIEnd
FunctionEnd
Добавить к контролу стиль ${WS_VSCROLL} или ${WS_HSCROLL} для вертикальной и горизонтальной полос прокруток соответственно. »
Спасибо. А как это сделать по уму?
Хочу добавить длинный прокручиваемый текст, чтобы нельзя было ничего вводить в окне инсталлятора и чтобы курсор не мигал)
В официальной справке нашёл пример, но там текст редактируется в окошке инсталлятора
Function fnCustomInit
nsDialogs::Create 1018
Pop $label
nsDialogs::CreateControl EDIT \
"${__NSD_Label_STYLE}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN}" \
"${__NSD_Label_EXSTYLE}" \
0 50% 100% 40% \
"This IS a$\r$\nmulti-line$\r$\nedit control"
Pop $hwnd
nsDialogs::Show
FunctionEnd
Begin2Fly
13-01-2017, 17:31
Спасибо. А как это сделать по уму? »
По вкусу: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632600(v=vs.85).aspx
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.