2008-09-26 94 views
7

因此,我有一個小型的C#應用​​程序需要定期檢查網絡上多臺機器上的目錄內容。我以爲我可以只讀\ hostname \ C $作爲目錄路徑,但對於普通的Directory類,似乎沒有辦法對其他服務器進行身份驗證,因此您可以訪問隱藏的共享。 我確信有一個簡單的方法可以做到這一點,我忽略了,但目前我有點失落。在C中閱讀隱藏的共享#

+0

這應該工作。你得到的例外是什麼? – 2008-09-26 15:12:15

回答

6

http://bytes.com/forum/thread689145.html

在 登錄的用戶帳戶的上下文中運行的所有進程。如果您想要在另一臺計算機上打開文件 ,則您的 應用程序必須在具有權限 的用戶上下文中運行,該用戶才能在該計算機上打開文件。你可以 與模擬做到這一點。

最簡單的方法似乎是給當前用戶在其他機器上的適當權利。

+1

這也是最好的方法,因爲它不需要在軟件中處理認證(這很容易出錯)。 – Luke 2008-09-26 15:30:16

0

您是否在尋找一種在運行時設置當前用戶的方法?

如果沒有,只要運行該過程的用戶訪問這些計算機,這會爲你工作:

DirectoryInfo di = new DirectoryInfo(@"\\machineName\c$\temp"); 

FileInfo[] files = di.GetFiles(); 

foreach (FileInfo f in files) 
{ 
    Debug.WriteLine(f.Name); 
} 
2

要與份額,其在運行過程中,用戶沒有權限驗證(這往往是管理共享的情況下),嘗試運行net use命令:

net use SERVERNAME\IPC$ /user:USERNAME PASSWORD 

嘗試在實際上試圖訪問共享的代碼之前一個單獨的進程運行此,如:

ProcessStartInfo psi = new ProcessStartInfo(
    "net", "use " + SERVERNAME + @"\IPC$ /user:" + USERNAME + " " + PASSWORD); 
Process p = new Process(); 
p.StartInfo = psi; 
p.Start(); 
p.WaitForExit(); 
p.Close(); 
// The code to access the share follows... 

如果不適合爲運行該流程的用戶帳戶授予共享權限,則此功能非常有用,例如,對於最終用戶應用程序需要訪問用戶本人不應直接訪問的共享數據的安全模型。