是否有可能取消阻止从 ac# 程序中从 Internet 下载的文件。我在网上冲浪时了解到,该信息被写入包含当前区域信息的 (NTFS) 文件的替代流中(值 3 来自互联网并被解释为被阻止)。
是否存在清除或更改文件的区域信息(取消阻止)的托管可能性,或者是否存在复制没有区域信息的文件的托管复制功能?如果没有,我该如何使用 PInvoke 但不包括外部程序集(我不允许在当前项目中这样做)。
是否有可能取消阻止从 ac# 程序中从 Internet 下载的文件。我在网上冲浪时了解到,该信息被写入包含当前区域信息的 (NTFS) 文件的替代流中(值 3 来自互联网并被解释为被阻止)。
是否存在清除或更改文件的区域信息(取消阻止)的托管可能性,或者是否存在复制没有区域信息的文件的托管复制功能?如果没有,我该如何使用 PInvoke 但不包括外部程序集(我不允许在当前项目中这样做)。
根据您的输入,我完成了以下代码:
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");
}
}
感谢 Stuart Dunkeld、Alex K(+1) 和 Sven 为我指明了方向。
更新如果它在生产环境中工作可靠, 我已经在这里发布了代码以获取反馈。如果有人想使用它,请查看那里。
它存储在:Zone.Identifier
流 ( more < c:\theapp.exe:Zone.Identifier
) 中,您需要使用本机 IO 例程来操作它们,这里是托管包装器。
管理此标识符的官方方法是使用 PersistentZoneIdentifier COM 对象: http: //msdn.microsoft.com/en-us/library/ms537029 (v=vs.85).aspx