重现被阻止的exe“ unblock” Windows 2003中的文件属性中的选项

StackOverflow https://stackoverflow.com/questions/135600

当我将我的程序从我的网站下载到我的Windows 2003机器时,它上面有一个块,您必须右键单击exe,然后选择属性,然后选择按钮“取消阻止”。

我想在我的安装程序中添加检测文件被阻止的时间,因此没有足够的权限。

但是我无法在这个需要解除阻塞的状态下重新获得我的exe。

如何让unblock出现在我的exe上,以便我可以测试这个功能?

有帮助吗?

解决方案

这是使用NTFS文件流完成的。有一个名为“Zone.Identifier”的流。添加到下载的文件。当IE7下载流包含的某些类型的文件时:

[ZoneTransfer]
ZoneId=3

设置它的最简单方法是创建一个包含其中内容的文本文件,并使用更多内容将其添加到备用流中。

Zone.Identifier.txt:

more Zone.Identifier.txt > file.exe:Zone.Identifier

命令:

<*>

然后,您检查它的方法是尝试打开Zone.Identifier流并查找ZoneId = 3,或者只是假设如果流存在,您的用户将收到该警告。

同样重要的是要注意这与权限无关。管理员看到相同的警告;它完全与文件的来源和类型有关。当用户取消选中“打开此文件前始终询问”时,整个流程就消失了。框,然后单击“运行”。

其他提示

有一个受支持的API,在MSDN上有记录。在MSDN上搜索“持久区域标识符对象”。基本上你用 CLSID_PersistentZoneIdentifier CoCreateInstance 并请求 IPersistFile 接口。然后使用相关文件的名称调用 IPersistFile :: Load 。接下来,对于 IZoneIdentifier 接口进行QI,并使用 IZoneIdentifier :: GetId 来获取文件的区域。如果没有“网络标记”,则应获取 URLZONE_LOCAL_MACHINE 。另一个回复中提到的ZoneId为 URLZONE_INTERNET 。 (枚举称为 URLZONE ,也在MSDN上记录,或参见 sdk \ inc \ urlmon.h 。)您可以删除或更改“网络标记” ;通过调用 IZoneIdentifier :: Remove IZoneIdentifier :: SetId 然后调用 IPersistFile :: Save 。在MSDN上有关于所有这些的更多细节。祝你好运!

谢谢你,这给了我很多帮助。

如果您创建包含内容的批处理文件,则可以使过程更加轻松。

echo [ZoneTransfer] > Zone.Identifier
echo ZoneId=3 >> Zone.Identifier
more Zone.Identifier > %1:Zone.Identifier

这将为您生成Zone.Identifier并相应地标记文件。

要运行它,只需提供文件名,例如如果文件名为mark.bat

mark.bat myfile.txt
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top