воскресенье, 5 октября 2014 г.

Эпопея с блокировкой файлов из интернета.

Скачал я как то раз клиент игрушки одной. Большой клиент, много exe и dll файликов. Однако запускаться он не пожелал.
Говорит не могу файлы запускать, изменять - они ж с непроверенного источника, из самого интернета.

Щелкнул свойства файла - вижу надпись:
"Этот файл  получен с другого компьютера и, возможно, был заблокирован с целью защиты компьютера." И кнопочка рядом - "Разблокировать".

Нажимая кнопочку - вроде сработало. Дальше всё по правилам - "Применить" и "Ок". Бац - не запускается. Я не в понятках, опять свойства открываю - а он опять заблокирован.

Пошёл в гугль правду искать. Искал искал, набрёл на утилиту снятия блокировки - Streams http://technet.microsoft.com/en-us/sysinternals/bb897440. Со всех файлов снимать блокировку умеет рекурсивно. Запускаю - ан нет, не может снять блокировку. А заместо объяснения почему - знаки вопросиков выводит.

Думал думал и надумал - а вдруг программисты микрософта сделали бяку - забыли что файл может быть с атрибутом "Только для чтения", и потому ошибку при разблокировке не выводят.

Ну, терять то нечего - открыл свойства всей папки, снял атрибут только для чтения - и вуаля, стали разблокироваться файлы. Написал я в консоли слова заветные - "streams -d -s %cd%" и разблокировались все файлы.

Вот такая вот незавидная история. А ведь пару метров нервов я потратил на не убирающуюся блокировку. Но даже программисты из микрософта могут ошибаться - забыли добавить обработку ошибки при снятии блокировки - в результате фиг поймёшь, что происходит.

PS Так же в процессе поисков выяснился механизм данной блокировки - в альтернативных потоках файла прописывается ini файл с меткой зоны, из которой был скачан. Увидеть их можно вызвав команду dir /r в папке с файлом.
Открыть эти файлы не представляется возможным - ругаются программы на некорректные именования файлов. Удалить тоже не получилось. Но есть мнение, что эти ограничения мнимые и прямой вызов функции удаления спокойно выполнит задачу.