当我从我的网站上下载我的程序到我的Windows 2003机器时,它有一个块,你必须右键单击exe文件,然后属性,然后选择“Unblock”按钮。在Windows 2003的文件属性中重现被阻止的exe“unblock”选项
我想在我的安装程序中添加检测,以了解文件何时被阻止,因此没有足够的权限。
但我不能eaisly重现获取我的EXE在这种状态,它需要畅通无阻。
我怎样才能让我的exe文件出现unblock,这样我就可以测试这个功能了?
当我从我的网站上下载我的程序到我的Windows 2003机器时,它有一个块,你必须右键单击exe文件,然后属性,然后选择“Unblock”按钮。在Windows 2003的文件属性中重现被阻止的exe“unblock”选项
我想在我的安装程序中添加检测,以了解文件何时被阻止,因此没有足够的权限。
但我不能eaisly重现获取我的EXE在这种状态,它需要畅通无阻。
我怎样才能让我的exe文件出现unblock,这样我就可以测试这个功能了?
这是使用NTFS文件流完成的。有一个名为“Zone.Identifier”的流添加到下载的文件中。当IE7下载某些类型的文件,它流包含:
[ZoneTransfer]
ZoneId=3
设置它最简单的方法是在其中创建这些内容的文本文件,并使用更多的将它添加到备用流。
Zone.Identifier.txt:
[ZoneTransfer]
ZoneId=3
命令:
more Zone.Identifier.txt > file.exe:Zone.Identifier
然后,你检查它的方法是尝试打开Zone.Identifier流并查找了zoneid = 3,或者简单地假设如果流存在于你的用户将收到该警告的全部位置。
还需注意的是,这与权限无关。管理员看到相同的警告;这完全取决于文件的来源和类型。当用户取消选中“在打开此文件前始终询问”框,然后单击“运行”,整个流将消失。
有一个支持的API,在MSDN上有记录。在MSDN上搜索“持久区域标识符对象”。基本上你CoCreateInstance
与CLSID_PersistentZoneIdentifier
和请求IPersistFile
接口。然后,您可以拨打IPersistFile::Load
来查询相关文件的名称。接下来,QI为IZoneIdentifier
接口并使用IZoneIdentifier::GetId
来获取文件的区域。如果没有“网络标记”,则应该获得URLZONE_LOCAL_MACHINE
。在另一个回复中提到的3区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
伟大的信息,感谢您的帮助。 – 2008-09-25 20:59:39