2010-07-07 108 views
0

當我使用:如何從要求身份驗證的計算機上將文件複製到本地計算機?

File.Copy(strRemoteFolder, strLocalFolder) 

我得到以下消息的UnauthorizedAccessException:「訪問路徑...被拒絕。」

在.NET中,如何從要求身份驗證的遠程計算機將文件複製到本地計算機?我知道我需要以某種方式提供用戶名和密碼,但我不知道如何通過.NET中的API提供該信息。

+0

下面你注意,你有不同的域,不能提供跨域的憑證。你有遠程PC的控制權嗎? – 2010-07-07 21:28:39

+0

@Tim我們可以控制遠程PC,但我認爲出於安全考慮,我們無法創建允許跨域訪問的策略。 – 2010-07-08 12:36:58

回答

0

調整目標系統上的共享權限以允許訪問。

+0

我特別需要.NET中的解決方案。目標機器位於不同的域上,我們無法在不同域之間提供憑據。 – 2010-07-07 21:23:16

+0

這不會使答案無效。否則你可以寫一個程序並從任何其他機器獲取任何受保護的數據。不太可能發生。 – Randy 2010-07-07 21:24:19

0

如果不進行身份驗證,您將無法複製受保護服務器中的文件。

1

可以使用非託管LogonUser函數來得到一個帳戶令牌在遠程計算機上的會話,然後調用WindowsIdentity.Impersonate使用該會話。 WindowsIdentity.Impersonate上的MSDN頁面描述瞭如何對LogonUser進行p/invoke調用。

您可能無法使用File.Copy,因爲您無法訪問本地計算機,但可以撥打File.OpenRead打開遠程文件,然後恢復您的令牌。事情是這樣的:

[DllImport("advapi32.dll")] 
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); 
[DllImport("kernel32.dll")] 
public static extern bool CloseHandle(IntPtr hObject); 

public static Stream OpenFileWithAccount(string filename, string username, string domain, string password) 
{ 
    IntPtr token; 
    if (!LogonUser(username, domain, password, 2, 0, out token)) 
    { 
     throw new Win32Exception(); 
    } 
    try 
    { 
     using (WindowsIdentity.Impersonate(token)) 
     { 
      return File.OpenRead(filename); 
     } 
    } 
    finally 
    { 
     CloseHandle(token); 
    } 
} 
+0

也許你以錯誤的順序得到了方法調用的參數? - >(用戶名,域名,密碼....)在宣言 – MaLio 2010-07-08 00:51:27

+1

@MaLio:你說得對,我做到了。謝謝你的收穫! – Quartermeister 2010-07-08 03:32:33

+0

訂單錯在哪裏?我找不到這個。幫我。調用LogUser方法時出錯。 – AT07 2012-09-04 07:18:37

1

的建議使用LogonUser登錄遠程計算機上是明確錯誤。您應使用WNetAddConnection2NetUseAdd參數級別2(USE_INFO_2)本機API進行遠程登錄。

0

由於您可以控制兩臺機器,因此可以在兩臺機器上創建具有匹配密碼的本地用戶,然後以該用戶身份運行程序。

或者您可以在遠程計算機上創建用戶,並使用該用戶的用戶名/密碼將驅動器映射到該計算機。您將指定用戶爲RemoteServer\NewUser。所以你參考here的淨使用將是use s: \\remoteserver\share /USER:RemoteServer\NewUser password。然後再打電話網,但通過use s: /delete清理...

(這裏假設你已經正確配置,用戶能夠訪問有關具體份額/文件夾。)

相關問題