检测文件是否已被操作系统阻止

本文关键字:操作系统 文件 是否 检测 | 更新日期: 2023-09-27 18:21:24

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

我相信这是当文件从未知来源(如互联网)传输到计算机上时造成的。

有没有一种方法可以检测到文件在C#中被阻止?我不确定这个"操作系统块"是否设置了特定的文件属性或其他什么。也可以通过某种方式取消阻止该文件吗?

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

检测文件是否已被操作系统阻止

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

要与数据流交互,您可以使用Windows API CreateFile函数并传入带有文件名的:Zone.Identifier(如本问题所示),或者更好的是,只需使用CodeProject之外的此库即可为您完成此操作。