當我從我的網站上下載我的程序到我的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