是否有可能从C#程序内部解除阻止从Internet下载的文件。在Internet上冲浪时我了解到,信息写入到包含当前区域信息的(NTFS)文件的备用流中(值3来自Internet,并被解释为已阻止)。是否存在清除或更改文件的区域信息(解除阻止)的托管可能性,或者是否存在复制不带区域信息的文件的托管复制功能?如果没有,如何在不包括外部程序集的情况下使用PInvoke(不允许在当前项目中这样做)。
disho6za1#
根据您的输入,我完成了以下代码:
public class FileUnblocker { [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool DeleteFile(string name); public bool Unblock(string fileName) { return DeleteFile(fileName + ":Zone.Identifier"); } }
感谢斯图尔特·邓克尔德、亚历克斯·K(+1)和斯文给我指明了方向。
更新我已经发布了代码here的反馈,如果它将工作可靠的生产环境。如果有人想使用它,检查那里。
zf9nrax12#
它存储在:Zone.Identifier流(more < c:\theapp.exe:Zone.Identifier)中,您需要使用本地IO例程来操作它们,这里是一个managed wrapper。
:Zone.Identifier
more < c:\theapp.exe:Zone.Identifier
kh212irz3#
管理此标识符的正式方法是使用PersistentZoneIdentifier COM对象:http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx
qvtsj1bj4#
如果您只想取消阻止文件,请使用powershell命令:
dir -r | unblock-files
将目录更改为包含文件的文件夹并运行该命令。参数-r用于列出所有子文件夹中的文件。
4条答案
按热度按时间disho6za1#
根据您的输入,我完成了以下代码:
感谢斯图尔特·邓克尔德、亚历克斯·K(+1)和斯文给我指明了方向。
更新我已经发布了代码here的反馈,如果它将工作可靠的生产环境。如果有人想使用它,检查那里。
zf9nrax12#
它存储在
:Zone.Identifier
流(more < c:\theapp.exe:Zone.Identifier
)中,您需要使用本地IO例程来操作它们,这里是一个managed wrapper。kh212irz3#
管理此标识符的正式方法是使用PersistentZoneIdentifier COM对象:http://msdn.microsoft.com/en-us/library/ms537029(v=vs.85).aspx
qvtsj1bj4#
如果您只想取消阻止文件,请使用powershell命令:
将目录更改为包含文件的文件夹并运行该命令。参数-r用于列出所有子文件夹中的文件。