- Сообщения
- 5,379
- Репутация
- 2,724
Все вы наверное сталкивались с ситуацией, когда при попытке запуска скаченного из сети .exe файла всплывает предупреждение безопасности.
Однако, этого не происходит, если .exe файл был помещен в архив. Так в чем же тогда хитрость, и как избавиться от этого предупреждения? Дело в том, что при сохранении файла на диск, браузер (?) создает альтернативный поток с именем Zone.Identifier следующего содержания:
Параметр ZoneId указывает источник, откуда был получен файл. Возможны следующие значения:
Для просмотра или редактирования данных Zone.Identifier можно воспользоваться обычным блокнотом, вызвав его следующим образом:
Для перечисления всех потоков файла (если интересно) используйте функцию _WinAPI_EnumFileStreams(). Чтобы избавиться от показа предупреждения безопасности измените значение ZoneId на 0, 1 или 2. Если ZoneId будет равна 4, то этот файл в эксплорере вообще запустить не удастся.
Но самым правильным решением, IMHO, будет полное удаление потока Zone.Identifier из файла. И что самое приятное, для этого почти ничего не придется делать, все происходит на уровне файловой системы. Вот простая функция для удаления потока Zone.Identifier из указанного файла.
P.S
Альтернативные потоки поддерживаются только файловой системой NTFS. В других файловых системах ни потоков, ни предупреждений безопасности, естественно, не будет.
Однако, этого не происходит, если .exe файл был помещен в архив. Так в чем же тогда хитрость, и как избавиться от этого предупреждения? Дело в том, что при сохранении файла на диск, браузер (?) создает альтернативный поток с именем Zone.Identifier следующего содержания:
Код:
[ZoneTransfer]
ZoneId=3
Параметр ZoneId указывает источник, откуда был получен файл. Возможны следующие значения:
- 0 - Локальный компьютер
- 1 - Интранет
- 2 - Доверенный источник
- 3 - Интернет
- 4 - Недоверенный источник
Для просмотра или редактирования данных Zone.Identifier можно воспользоваться обычным блокнотом, вызвав его следующим образом:
Код:
Notepad.exe MyApp.exe:Zone.Identifier
Для перечисления всех потоков файла (если интересно) используйте функцию _WinAPI_EnumFileStreams(). Чтобы избавиться от показа предупреждения безопасности измените значение ZoneId на 0, 1 или 2. Если ZoneId будет равна 4, то этот файл в эксплорере вообще запустить не удастся.
Но самым правильным решением, IMHO, будет полное удаление потока Zone.Identifier из файла. И что самое приятное, для этого почти ничего не придется делать, все происходит на уровне файловой системы. Вот простая функция для удаления потока Zone.Identifier из указанного файла.
Код:
#Include <WinAPIEx.au3>
Func _RemoveZoneID($sFile)
If Not _WinAPI_DeleteFile($sFile & ':Zone.Identifier') Then
Return 1
EndIf
Return SetError(1, 0, 0)
EndFunc ;==>_RemoveZoneID
P.S
Альтернативные потоки поддерживаются только файловой системой NTFS. В других файловых системах ни потоков, ни предупреждений безопасности, естественно, не будет.