我有一个用 C# 编写的应用程序,它是通过 InnoSetup 安装的。
启用Windows 10 的 Defender 的受控文件夹访问后,安装程序无法创建桌面图标(显示消息PersistFile::Save failed, code 0x80070002
)——尽管以管理权限运行。
此外,已安装的应用程序(未以管理权限运行)无法写入用户的文件夹,例如Documents。
即使对于不会覆盖任何现有内容的新文件或文件夹也会发生这种情况。对于勒索软件保护,我希望只修改现有文件被认为是危险的。
我想到的第一个问题是:为什么我的应用程序被认为是有害的并因此被阻止?
我进行了广泛的研究以获得答案,但找不到任何有帮助的东西:
来自 Mircosoft 的 Web 资源描述了哪些应用程序被认为是有害的,以及为什么找不到 - 只是在那里猜测。
使用扩展验证证书(有助于抑制 SmartScreen 警告)对我的应用程序进行签名不会改变 Windows Defender 的行为。
我让 Windows 应用程序认证工具包分析安装程序——它报告了几个警告和一个严重错误。我修复了套件抱怨的所有问题(除了关于 /SAFESEH 的警告,这在 InnoSetup 中是不可能的),但这并没有改变 Windows Defender 关于访问阻止的行为。
所以,我提炼的问题是:如何以有效的方式绕过 Windows Defender 对我的设置和应用程序的访问阻止?
为了深入了解问题并为实验提供基础,我在 C# 中建立了一个小型示例应用程序,
- 在公共桌面路径、用户桌面路径、公共文档路径和用户文档路径中创建新(然后删除)目录
- 由 InnoSetup 脚本捆绑到签名安装程序
使用 Visual Studio 构建解决方案并使用 InnoSetup 打包构建,使用启用的受控文件夹访问应该很容易重现行为。(请务必查看 README.md 以了解构建步骤的说明!)
请查看示例项目。