![](/img/trans.png)
[英]How can I copy files from Azure File storage to my local machine every 2 hours (periodically)?
[英]How to I copy a file from a computer that requires authentication to my local machine?
我用的時候:
File.Copy(strRemoteFolder, strLocalFolder)
我收到帶有以下消息的UnauthorizedAccessException
:“對路徑...的訪問被拒絕。”
在.NET中,如何從需要身份驗證的遠程計算機復制文件到本地計算機? 我知道我將需要以某種方式提供用戶名和密碼,但是我不知道如何通過.NET中的API提供該信息。
您可以使用非托管的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);
}
}
使用LogonUser
登錄遠程計算機的建議肯定是錯誤的。 您應該將WNetAddConnection2
或NetUseAdd
與參數級別2( USE_INFO_2
)本機API一起使用以進行遠程登錄。
調整目標系統上的共享特權以允許訪問。
未經身份驗證,您將無法從受保護的服務器復制文件。
您可以使用advapi32.dll中包含的LogonUser()
。 我還沒有親自使用它,但是看起來很簡單。
[DllImport("ADVAPI32.DLL")]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, out int phToken);
http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
http://www.pinvoke.net/default.aspx/advapi32.logonuser
由於您可以控制兩台計算機,因此可以在兩台計算機上創建具有匹配密碼的本地用戶,然后以該用戶身份運行程序。
或者,您可以只在遠程計算機上創建用戶,然后使用該用戶的用戶名/密碼將驅動器映射到該計算機。 您可以將用戶指定為RemoteServer\\NewUser
。 因此, 此處引用的要最終使用的參數將use s: \\\\remoteserver\\share /USER:RemoteServer\\NewUser password
。 然后再次調用net,但是use s: /delete
進行清理...
(這里的假設是您已經正確配置了用戶以訪問所涉及的特定共享/文件夾。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.