Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось inco1, 06-03-2023 в 12:39. Причина: Добавлено


Отправлено: 01:59, 06-03-2023 | #2674