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

时间:2013-07-08 13:01:33

标签: c# .net windows security blocked

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

我认为这是因为文件从未知来源(例如互联网)传输到计算机上而引起的。

有没有办法可以检测到文件在C#中被阻止?我不确定这个“操作系统块”是否设置了特定的文件属性。也可以在某种程度上取消阻止文件?

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

1 个答案:

答案 0 :(得分:2)

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

要与数据流交互,您可以使用Windows API CreateFile函数并使用文件名传递:Zone.Identifier(如this question所示),或者更好的是,只使用{{3}离开CodeProject来为你做。