c# - 检测文件是否被操作系统阻止

标签 c# .net windows security

有一个有趣的问题,出于某种原因,当我们的客户将我们的应用程序部署到他们的计算机上(文件复制部署)时,Windows 阻止了所有文件。这可以通过右键单击文件,转到属性然后有标题为“取消阻止”的按钮来检测。

我认为这是文件从未知来源(例如互联网)传输到计算机时造成的。

有没有一种方法可以检测到文件在 C# 中被阻止?我不确定这个“操作系统 block ”是否设置了特定的文件属性或其他东西。也可以通过某种方式解锁文件吗?

注意:我知道用于检查文件是否被阻止的 .exe 文件本身可能被阻止的悖论,但我希望我的用户至少可以从安装集中取消阻止一个文件!

最佳答案

在 Windows 中,此功能是使用带有区域标识符的替代数据流来实现的。 (参见 Hanselman 的解释 here )。您只需要检测区域标识符 3 或 4,这表明文件已被阻止。

要与数据流交互,您可以使用 Windows API CreateFile 函数并传入 :Zone.Identifier 和文件名(如 this question 所示),或者更好的是,只需使用this library off of CodeProject为你做。

关于c# - 检测文件是否被操作系统阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17527347/

相关文章:

c# - 命令绑定(bind)在 Flyout 或 FlyoutMenu 中不起作用

c# - 说明在 foreach 期间更改属性时可枚举的 "unpredictable behavior"

c# - Dotnet-core默认使用2.0框架ubuntu

php - 从 PHP 使用 DOTNET 时遇到问题。

windows - 用户空间中断计时器访问,例如通过 KeQueryInterruptTime(或类似的)

c# - 2 个 IObservable 上的响应式(Reactive) linq 表达式

asp.net - 如何在 ASP.Net 中创建基于本地化对象的 UI?

c# - 如何找出 .net 类实现了哪些接口(interface)?

c++ - OpenGL(在 Qt 中)- 旋转问题

windows - 如何以跨平台友好的方式处理 C/C++ 中的 Unicode 字符串?