2013-07-08 71 views
3

有一個有趣的問題,出於某種原因,當我們的客戶將我們的應用程序部署到他們的計算機上時(文件複製部署),Windows阻止了所有文件。這可以通過右鍵單擊文件,去屬性,然後有標題爲「解除阻止」的按鈕來檢測。檢測文件是否被操作系統阻止

我相信這是在文件從未知來源(如互聯網)傳輸到計算機時引起的。

有沒有一種方法可以檢測到文件在C#中被阻塞?我不確定這個「操作系統塊」是否設置了特定的文件屬性或其他內容。文件也可以在某種程度上被解除封鎖嗎?

注意:我知道用於檢查文件是否被阻止的.exe文件本身可能被阻止,但我希望我的用戶至少可以從安裝集中取消阻止一個文件!

回答

2

在Windows中,此功能是使用具有區域標識符的替代數據流實現的。 (見Hanselman的解釋here)。您只需要檢測3或4的區域標識符,這表明該文件被阻止。

與數據流的交互,可以使用Windows API CreateFile函數,並傳遞:Zone.Identifier與文件名(如圖this question),或者更好的,只是使用this library關閉CodeProject上的做爲你。