簡體   English   中英

var di = new DirectoryInfo(path)引發異常,直到我第一次使用Windows資源管理器打開路徑

[英]var di = new DirectoryInfo(path) throws exception until I use Windows Explorer to open the path for a first time

var di = new DirectoryInfo(Root);
var diList = di.GetDirectories();

當訪問網絡上的文本路徑“ Root”時,以上內容崩潰。 僅當用戶首次登錄Windows 7(未經其他操作系統測試)時,我才會發生。 如果用戶使用Windows資源管理器導航到指定的路徑,則di可以檢索目錄。

我知道可以進行捕獲並提示用戶單擊打開Windows資源管理器並導航到路徑的鏈接,但是我不是解決問題的人。 我希望我的程序能夠建立與網絡路徑的連接,而無需Windows Explorer首先進行連接。

例外:

System.IO.IOException: The network name cannot be found.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path,string originalUserPath,
  String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler,
  Boolean checkHost)
at System.IO.DirectoryInfo.InternalGetDirectories(String searchPattern,
 SearchOption searchOption) at Controls.ValidationControl.LoadDBox(Object sender,
 RoutedEventArgs e)
in c:\Controls\ValidationControl.xaml.cs:line 1010

約翰,謝謝您的支持。

Microsoft的安全性將阻止您使用應用程序捕獲的憑據通過UNC訪問SharePoint。 因此,在嘗試了所有上述解決方案和其他3個網絡訪問類之后,沒有人會看到該路徑並讓我登錄,所以我只用了

Process.Start(dir);

並提示用戶正在發生的事情。 Windows資源管理器將使用用戶的憑據啟動,並導航到Windows然后使用用戶的域帳戶登錄SharePoint的路徑。 Windows可以做到。 不適用於Microsoft的程序員不能。

既然您說過這是在網絡文件夾上發生的,那么我的第一個傾向是,此應用程序在其下運行的Windows進程沒有安全性訪問權限來讀取目錄信息。 當用戶瀏覽到該文件夾​​時,安全性便得到了驗證,因此您的應用程序現在可以讀取它。

如果Root是本地文件夾,則該應用程序可以正常工作嗎?

最可能的原因似乎是用戶需要登錄才能訪問網絡路徑。 在通過Explorer訪問路徑之前,似乎不會發生這種情況。 嘗試將網絡文件夾映射為本地計算機上的驅動器,並將其設置為自動登錄。 這可能會有所幫助。

編輯:-正如Scottie在另一個答案中指出的那樣,程序在其下運行的憑據也可能需要訪問共享文件夾。

EDIT#2:-您可以使用P/Invoke傳遞憑據[Ref] 或者,你可以調用LogonUser方法做模擬為解釋在這里 有關模擬和LogonUser更多詳細信息,可以在此問題及其答案中找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM