iglezz,
Проверил множество раз. Ваш предложенный компактный вариант не работает, если файла hosts.ics не существует. Точнее сказать работает, но добавляет только четыре строки без первой.
Если же файл hosts.ics уже существует, то работает правильно. как и задумано. Проверял самым простым экзешником:
Скрытый текст
Код:
Unicode true
SetOverwrite on
RequestExecutionLevel admin
!include "x64.nsh"
!include "LogicLib.nsh"
!include "hostsblock.nsh"
Section
${IfThen} ${RunningX64} ${|} ${DisableX64FSRedirection} ${|}
Var /global hostsfile
StrCpy $hostsfile "$SYSDIR\drivers\etc\hosts.ics"
${IfNot} ${FileExists} $hostsfile
FileOpen $0 $hostsfile W
FileClose $0
${EndIf}
SetFileAttributes $hostsfile NORMAL
${hostsfile_BlockHost} $hostsfile 'martau.com'
${hostsfile_BlockHost} $hostsfile 'www.martau.com'
${hostsfile_BlockHost} $hostsfile 'www.total-uninstall.com'
${hostsfile_BlockHost} $hostsfile 'total-uninstall.com'
${hostsfile_BlockHost} $hostsfile '64.91.254.118'
SetFileAttributes $hostsfile READONLY
SectionEnd
Тот, что я предложил с лишними записями работает как надо, и когда файл hosts.ics отсутствует и когда он уже есть:
Скрытый текст
Код:
Unicode true
SetOverwrite on
RequestExecutionLevel admin
!include "x64.nsh"
!include "LogicLib.nsh"
!include "hostsblock.nsh"
Section
Var /global hostsics
StrCpy $hostsics "$SYSDIR\drivers\etc"
${IfThen} ${RunningX64} ${|} ${DisableX64FSRedirection} ${|}
${If} ${FileExists} "$hostsics\hosts.ics"
SetFileAttributes "$hostsics\hosts.ics" NORMAL
StrCpy $0 '$hostsics\hosts.ics'
StrCpy $1 '$hostsics\1.txt'
StrCpy $2 '$hostsics\2.txt'
CopyFiles /SILENT $0 $1
FileOpen $3 $1 A
FileSeek $3 0 END
FileClose $3
CopyFiles /SILENT $1 $2
FileOpen $3 $2 A
FileClose $3
${hostsfile_BlockHost} $2 'martau.com'
${hostsfile_BlockHost} $2 'www.martau.com'
${hostsfile_BlockHost} $2 'www.total-uninstall.com'
${hostsfile_BlockHost} $2 'total-uninstall.com'
${hostsfile_BlockHost} $2 '64.91.254.118'
CopyFiles /SILENT $2 $0
Delete "$hostsics\1.txt"
Delete "$hostsics\2.txt"
${Else}
FileOpen $0 "$hostsics\hosts.ics" w
FileWrite $0 "0.0.0.0 martau.com $\r$\n"
FileWrite $0 "0.0.0.0 www.martau.com $\r$\n"
FileWrite $0 "0.0.0.0 total-uninstall.com $\r$\n"
FileWrite $0 "0.0.0.0 www.total-uninstall.com $\r$\n"
FileWrite $0 "0.0.0.0 64.91.254.118 $\r$\n"
FileClose $0
${EndIf}
SetFileAttributes "$hostsics\hosts.ics" READONLY
SectionEnd
Так же правильно работает, как с уже созданным файлом "hosts.ics", так и без него такой вариант:
Скрытый текст
Код:
Unicode true
SetOverwrite on
RequestExecutionLevel admin
!include "x64.nsh"
!include "LogicLib.nsh"
!include "hostsblock.nsh"
Section
Var /global hostsfile
StrCpy $hostsfile "$SYSDIR\drivers\etc\hosts.ics"
${IfThen} ${RunningX64} ${|} ${DisableX64FSRedirection} ${|}
${If} ${FileExists} "$hostsfile"
SetFileAttributes "$hostsfile" NORMAL
${hostsfile_BlockHost} "$hostsfile" 'martau.com'
${hostsfile_BlockHost} "$hostsfile" 'www.martau.com'
${hostsfile_BlockHost} "$hostsfile" 'www.total-uninstall.com'
${hostsfile_BlockHost} "$hostsfile" 'total-uninstall.com'
${hostsfile_BlockHost} "$hostsfile" '64.91.254.118'
${Else}
FileOpen $0 "$hostsfile" w
FileWrite $0 "0.0.0.0 martau.com $\r$\n"
FileWrite $0 "0.0.0.0 www.martau.com $\r$\n"
FileWrite $0 "0.0.0.0 total-uninstall.com $\r$\n"
FileWrite $0 "0.0.0.0 www.total-uninstall.com $\r$\n"
FileWrite $0 "0.0.0.0 64.91.254.118 $\r$\n"
FileClose $0
${EndIf}
SetFileAttributes "$hostsfile" READONLY
SectionEnd