У меня есть приложение, написанное на C #, которое устанавливается через InnoSetup.
При включенном Управляемом доступе к папкам Защитника Windows 10 программе установки не удается создать значок на рабочем столе (с сообщением PersistFile::Save failed, code 0x80070002
) - несмотря на то, что он работает с правами администратора.
Кроме того, установленному приложению (которое НЕ запускается с правами администратора) не удается записать в папки пользователя, например, Документы .
Это происходит даже для новых файлов или папок, которые не перезаписывают ничего существующего. Для защиты от вымогателей я ожидаю, что только изменение существующих файлов считается опасным.
Первый вопрос, который мне приходит в голову: Почему мое заявление считается вредным и поэтому блокируется?
Я провел обширное исследование, чтобы получить ответ, но не смог найти ничего, что помогло бы:
Веб-ресурсы от Mircosoft, описывающие, какие приложения считаются вредоносными, а почему нельзя найти - там только догадки.
Подписание моего приложения с помощью расширенного сертификата проверки (который помогает подавлять предупреждения SmartScreen) не меняет поведение Защитника Windows.
Я позволил Windows App Certification Kit проанализировать установщик, который сообщил о нескольких предупреждениях и одной критической ошибке. Я исправил все проблемы, на которые жаловался Кит (кроме предупреждения о / SAFESEH, что невозможно с InnoSetup), но это не изменило поведение Защитника Windows в отношении блокировки доступа.
Итак, мой уточненный вопрос: Как я могу корректно обойти блокировку доступа Защитника Windows для моей установки и моего приложения?
Чтобы понять проблему и создать основу для экспериментов, я создал небольшой пример приложения на C #, который
- создает новые (а затем удаляет) каталоги на пути к общедоступному рабочему столу, пути к рабочему столу пользователя, пути к обычным документам и пути к документам пользователя
- связывается скриптом InnoSetup с подписанным установщиком
Используя Visual Studio для сборки решения и InnoSetup для упаковки сборки, должно быть легко воспроизвести поведение с включенным Доступ к контролируемой папке . (Обязательно посмотрите README.md для описания шагов сборки!)
Пожалуйста, ознакомьтесь с примером проекта .