Этот файл получен с другого компьютера и может быть заблокирован для защиты этого компьютера. - Как программно удалить этот атрибут в C# .net?

Я сделал программу на C#. Он копирует себя в автозагрузку, если пользователь отметит это поле.

Приложение добавляет себя в автозагрузку с помощью ключа реестра "SOFTWARE\Microsoft\Windows\CurrentVersion\Run".

Он работает нормально, за исключением проблемы, заключающейся в том, что каждый раз, когда компьютер перезагружается, пользователю предлагается, уверены ли они, что хотят запустить программу, потому что она заблокирована Windows, потому что она «приходит с другого компьютера».

В любом случае я могу избавиться от этого флага «заблокировано» Windows с помощью кода, чтобы пользователь не запрашивал каждый раз, когда программа пытается запустить себя?

Спасибо


person user3418061    schedule 14.03.2014    source источник
comment
Файл копируется локально или с другого компьютера?   -  person thepirat000    schedule 14.03.2014
comment
Другим решением в этом случае будет копирование вручную, т. е. чтение данных из исходного файла и запись их в целевой файл, а не копирование файла. Таким образом, лишние данные, помеченные в файле, будут удалены. С другой стороны, так же как и информация о временных метках.   -  person Harry Johnston    schedule 14.03.2014
comment
Используйте API DeleteFile, передав имя файла, за которым следует :Zone.Identifier , то есть DeleteFile("c:\\yourfile.exe:Zone.Identifier");   -  person thepirat000    schedule 14.03.2014


Ответы (2)


При загрузке/копировании на компьютер Windows прикрепляла идентификатор зоны (http://msdn.microsoft.com/en-us/library/dn392609.aspx) в зависимости от местоположения, из которого был получен файл (http://msdn.microsoft.com/en-us/library/ms537183.aspx)

Чтобы разблокировать файл, вам нужно либо открыть свойства файла и нажать кнопку «Разблокировать», либо удалить его самостоятельно.

Дополнительную информацию о том, как это происходит, и несколько способов сделать это (в том числе с помощью кода) можно найти здесь: http://weblogs.asp.net/dixin/archive/2009/03/14/understanding-блокировка-и-разблокировка-интернет-файлов.aspx

person Brendan Grant    schedule 14.03.2014
comment
Вопрос был о том, как это сделать в коде C#, и вы ответили, что пользователь должен сделать это со свойствами файла или сделать это самостоятельно в коде. Поскольку как сделать это в коде был весь вопрос, я не вижу, где здесь ответ. - person Ken White; 14.03.2014
comment
@KenWhite На самом деле в последней ссылке есть еще одна ссылка и код, чтобы сделать это программно, вам, вероятно, придется прочитать всю статью. здесь объясняется, как доступ к альтернативным потокам данных из C# - person thepirat000; 14.03.2014
comment
@thepirat000: Если вопрос опубликован здесь, ответ должен быть опубликован здесь. Внешние ссылки следует использовать как дополнительные ссылки, а не как основной контент. Внешняя ссылка имеет другую внешнюю ссылку, которая содержит информацию, включающую код. не является ответом здесь. Это примерно такой же ответ, как говорит Google, вы можете посмотреть здесь и перейти по ссылкам, чтобы получить ответ, IMO. - person Ken White; 14.03.2014

попробуйте скрипт powershell http://technet.microsoft.com/en-us/library/hh849924.aspx

Unblock-File Разблокирует файлы, загруженные из Интернета. Набор параметров синтаксиса: ByPath Unblock-File [-Path] [-Confirm] [-WhatIf] [ ]

Набор параметров: ByLiteralPath Unblock-File -LiteralPath [-Confirm] [-WhatIf] [ ]

Подробное описание Командлет Unblock-File позволяет открывать файлы, загруженные из Интернета. Он разблокирует файлы сценариев Windows PowerShell, загруженные из Интернета, чтобы их можно было запускать, даже если политика выполнения Windows PowerShell настроена на RemoteSigned. По умолчанию эти файлы заблокированы для защиты компьютера от ненадежных файлов. Прежде чем использовать командлет Unblock-File, просмотрите файл и его источник и убедитесь, что его можно безопасно открывать. Внутри командлет Unblock-File удаляет альтернативный поток данных Zone.Identifier, который имеет значение «3», указывающее, что он был загружен из Интернета. Дополнительные сведения о политиках выполнения Windows PowerShell см. на странице about_Execution_Policies (http://go.microsoft.com/fwlink/?LinkID=135170). Этот командлет представлен в Windows PowerShell 3.0.

person user299654    schedule 14.03.2014
comment
Какое отношение этот ответ имеет к разблокировке файла через С#? - person Ken White; 14.03.2014