我在一個經常遇到訪問網絡共享的「問題」的胖客戶端應用程序上工作。在使用服務器執行任何IO之前,我的應用程序會測試共享(通常是\\ server \ share $形式)是否存在。這適用於檢測客戶端與服務器失去連接的情況,但仍存在隱藏共享存在的奇怪場景,但用戶無權從共享內讀取。有人可以共享(不是雙關語意思)測試當前用戶是否可以讀取共享文件所需的C#代碼嗎?我應該查詢共享的ACL還是共享中的文件?如果份額是空的呢?如果用戶是混合環境中的本地非管理員(XP Pro工作站,Novell網絡上沒有域的Windows 2003服務器),該怎麼辦?我的C#應用程序如何測試用戶是否具有「讀取」訪問網絡共享的權限?
3
A
回答
8
最簡單的方法就是做(例如嘗試讀取文件)。正如賈裏德所說,沒有辦法確保您將來能夠閱讀(網絡故障,更改權限等)。
至於代碼的話,你可以使用DirectoryInfo類對一些企圖答案:
string remotePath = @"\\server\share$";
bool haveAccess = false;
DirectoryInfo di = new DirectoryInfo(remotePath);
if (di.Exists)
{
try
{
// you could also call GetDirectories or GetFiles
// to test them individually
// this will throw an exception if you don't have
// rights to the directory, though
var acl = di.GetAccessControl();
haveAccess = true;
}
catch (UnauthorizedAccessException uae)
{
if (uae.Message.Contains("read-only"))
{
// seems like it is just read-only
haveAccess = true;
}
// no access, sorry
// do something else...
}
}
有在上面的代碼中的許多不足之處(如硬編碼的「只讀」測試),但它只是一個用來說明你能做什麼的例子。 DirectoryInfo還有一些其他幫助程序方法,可用來列出文件夾中的文件。如果您沒有訪問權限,這些方法將拋出一個UnauthorizedAccessException
異常,您可以使用該異常來測試訪問失敗的原因。查看關於GetAccessControl的更多信息,瞭解它所拋出的異常情況。
3
#1最可靠的方法,以確定是否以前有權限從共享閱讀是
- 嘗試和讀取共享
- 在閱讀可能發生的處理錯誤和認爲這是一個失敗的嘗試
但不幸的是根據您的描述您要確定您是否將有讀取權限分享。沒有辦法可靠地確定這一點。
無論有多少ACL,目錄等等,當你看完它們的時候,你可能會失去通過許多機制訪問共享的機會。最明顯的一個是網絡共享下降。所有你可以確定的是,你曾經有權限的份額。
相關問題
- 1. 訪問權限設置應用程序池用戶訪問FILESTREAM文件共享
- 2. 使用iPhone模擬器測試有限網絡訪問的iPhone應用程序
- 3. 使用C#ASP.NET訪問網絡共享
- 4. 使用權限創建網絡共享
- 5. 是否可以在測試應用程序之間共享Facebook測試用戶?
- 6. Powershell無權訪問網絡共享
- 7. 限制應用程序訪問網絡
- 8. Silverlight RIA Service應用程序 - 如何獲取網絡訪問權限?
- 9. 僅允許特定應用程序訪問網絡共享
- 10. 從應用程序訪問網絡共享
- 11. 我需要我的桌面應用程序訪問當前用戶沒有權限的網絡文件夾
- 12. Spring Security ACL - 具有讀取權限的用戶是否可以撤消自己的訪問權限?
- 13. 如何獲取網絡應用程序的權限?
- 14. 如何授予用戶應用程序的根訪問權限?
- 15. C#測試用戶是否有寫入文件夾的權限
- 16. 從c#web應用程序中的網絡共享訪問文件
- 17. 我想訪問網絡上的共享!
- 18. 測試網絡應用程序C#
- 19. 測試用戶是否有權訪問SharePoint中的項目
- 20. 我們是否可以使用具有訪問權限權限的algolia搜索
- 21. 如何從互聯網訪問我的網絡應用程序?
- 22. 如何在共享點訪問的網絡目錄上設置權限?
- 23. 如何檢查用戶是否具有windows api文件的訪問權限
- 24. 訪問網絡共享
- 25. iPhone網絡共享訪問
- 26. as3網絡共享訪問
- 27. 獲取哪些用戶具有管理員權限的帳戶(具有OAuthV2訪問權限)的API是什麼?
- 28. 如何訪問網絡共享域(IIS)
- 29. 如何創建一個共享目錄,具有對Android中所有應用程序的讀寫權限?
- 30. 如何授予我的COM +應用程序訪問權限?
我明白,只是閱讀並等待錯誤更準確,但對用戶來說不會很煩人嗎?提前閱讀一個ACL可能會節省一些挫折。你能指點我一些示例代碼嗎? – flipdoubt 2009-04-15 19:15:37
@ flipdoubt但ACL的讀取可能會掛起。兩者都需要閱讀份額。你應該總是設計一個FS操作(特別是遠程),假設它會掛起。通常後臺線程是你最好的朋友。你想要什麼類型的示例代碼? – JaredPar 2009-04-15 19:18:35