PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 [104] 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

MKN
17-11-2016, 15:10
вот что выдает ваш код »
мой код выдаёт что и должен (для 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:
....
если значение сходится по одну из значений продолжить установку

diakov
25-11-2016, 22:31
Ребят, подскажите как исправить ложный детект антивирусов установщика 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
Как это обойти? Может есть какие то упаковщики, протекторы или еще какие то варианты?

Flix
26-11-2016, 02:26
как исправить ложный детект антивирусов установщика NSIS »
Отправляешь файл в службу поддержки соответствующего антивируса и говоришь, что это ложное срабатывание. Они проверяют твой файл и выносят вердикт: действительно ложное срабатывание или нет. Если вина с их стороны, то в течении суток/двое в вирусные базы вносится исправление.

Из личного опыта общения:
Qihoo-360 - работают оперативно. Обычно отвечают в течении суток; :good:
McAfee-GW-Edition - реагируют в течении месяца, может и более. Вообще у них политика - ты должен быть их клиентом, купить подписку и зарегистрироваться на их сервисе. Короче клиентов они обрабатывают в первую очередь, всех остальных в порядке живой очереди; :read:
Bkav - вьетнамская антивирусная лаборатория. До них я так и не достучался, то ли английского не понимают, то ли гуглоперевод на вьетнамский. :insane:

Если часто собираешь несколько различных инсталляторов (не один или два в месяц), то естественно никакого терпения не хватит воевать с ложными срабатываниями. Поэтому, например, попробуй использовать UPX, но не последней версии (3.09.1!), а, например, 3.08. Я остановился на версии 1.20, не всегда, но в большинстве случаев помогает.

Также разный результат получается при установке различных режимов компрессии (ZLib, BZip2, LZMA), отключение Админправ, а также изменение других параметров инсталлятора.

Но если инсталлятор действительно содержит какую-то заразу, то вряд ли удастся её замаскировать.

diakov
26-11-2016, 08:28
Flix судя по поиску в гугле история с некотороми антивирусами не новая, а очень старая, и до сих пор не профиксена...

BuZzOFF
05-12-2016, 19:34
Подскажите, пожалуйста, как сделать...
К примеру, есть текстовый файл со списком программ и версий.
Файл этот хранится в интернетах и обновляется разработчиком с выходом новых версий.
"Название №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 строчка.
Как отфильтровать так, чтоб добавлялась только последняя версия каждой программы.
Никак не могу сообразить...

BuZzOFF
12-12-2016, 12:15
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)

MKN
13-12-2016, 12:44
Как отфильтровать так, чтоб добавлялась только последняя версия каждой программы. »
Предположим у нас есть файл 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


Если в списке разноимённые приложения, сначала последовательно выбираем версии в каждом из одноимённых приложений. Вариантов много.

BuZzOFF
13-12-2016, 13:42
MKN, спасибо, конечно. Но это всё же немного не то...
Как я понимаю это будет работать только если известно кол-во приложений в списке.
Var /global Ver1
Var /global Ver2
Var /global Ver3 »${WordFind} "$SumVer" "-" "+1" "$Ver1" ;
${WordFind} "$SumVer" "-" "+2" "$Ver2" ;
${WordFind} "$SumVer" "-" "+3" "$Ver3" ; »
Загвоздка в том что это как раз таки и не известно. Список обновляется.

MKN
13-12-2016, 13:47
это будет работать только если известно кол-во приложений в списке. »
Можно сначала посчитать все приложения и записать их в промежуточный временный файл, с которым потом и работать.
Т.е. - есть список с непредсказуемымм составом и количеством приложений. Читаем его и создаём временные файлы одноимённых приложений.
Далее с этими файлами работаем. Это будет ещё проще, чем "загонять" данные в переменные.

BuZzOFF
14-12-2016, 09:19
MKN, спасибо за наводку. Я куда-то не в ту степь думал... Всё оказалось проще.
Ток не файлами сделал, а с nsArray. Но принцип тот же.

MKN
14-12-2016, 10:44
не файлами сделал, а с nsArray »
Действительно, уже всё давно придумано. :)
Даже есть пример - nsArray_VersionSort.nsi на http://forums.winamp.com/showthread.php?t=330425
где каша из версий выстраивается в возрастающую последовательность версий.

Интересный плагин http://nsis.sourceforge.net/File:NsArray.zip
Но уж очень мутный в освоении... Добавить бы в Справочник практических примеров с этим плагином ...
Но наши NSIS-гуру к сожалению тему и форум почему то забросили...

Flix
21-12-2016, 16:40
Подскажите, пожалуйста, можно ли заблокировать один из элементов ListView? »
Намедни нужно было реализовать подобную задачу. Решил с помощью плагина EmbeddedLists (http://nsis.sourceforge.net/EmbeddedLists_plug-in).

http://i12.pixs.ru/storage/4/2/5/ListViewpn_1108975_24507425.png

Вместе с плагином поставляются примеры использования, смотрите в них что да как.

BuZzOFF
22-12-2016, 05:52
Flix, спасибо! Чуть позже гляну.
Если мне не изменяет память (http://forum.oszone.net/post-2529509-1680.html), этот плагин работает на IO.

Serg866
13-01-2017, 03:24
Ребят, подскажите как добавить полосу прокрутки текста на свою страницу, созданную в 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

Serg866
13-01-2017, 17:17
Добавить к контролу стиль ${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