回答
您可以使用system.diagnostocs.process調用'net use .... with userid and password'或命令外殼。
你可以,但你想嗎? – 2010-09-13 13:39:07
爲什麼不能達到你的用例的目標,那麼它是完全有效的。它的一行代碼實現了預期的結果。它內置了所有的錯誤處理,並且經過測試。似乎愚蠢地重寫功能。 – 2010-09-13 13:41:56
「如果它實現了你的用例的目的,那麼它是完全有效的」 - 這是一個非常廣泛的陳述,你的答案在我看來是一個反例。啓動一個新的流程來完成一個可以在單個P/Invoke中完成的事情(不需要重寫)就是使用大錘來破解一個螺母。 – 2010-09-13 14:01:59
執行此操作的最佳方法是p/invoke WNetUseConnection。
[StructLayout(LayoutKind.Sequential)]
private class NETRESOURCE
{
public int dwScope = 0;
public int dwType = 0;
public int dwDisplayType = 0;
public int dwUsage = 0;
public string lpLocalName = "";
public string lpRemoteName = "";
public string lpComment = "";
public string lpProvider = "";
}
[DllImport("Mpr.dll")]
private static extern int WNetUseConnection(
IntPtr hwndOwner,
NETRESOURCE lpNetResource,
string lpPassword,
string lpUserID,
int dwFlags,
string lpAccessName,
string lpBufferSize,
string lpResult
);
我仍然想知道爲什麼c#根本沒有這個方法.. – 2016-06-30 15:03:42
您可以使用WindowsIdentity類(與logon token)在讀取和寫入文件時模擬。
var windowsIdentity = new WindowsIdentity(logonToken);
using (var impersonationContext = windowsIdentity.Impersonate()) {
// Connect, read, write
}
只適用於Windows環境。當你開始使用AS400,Solaris和Linux時,會變得很麻煩,特別是如果共享需要的憑證不是你正在運行應用程序的憑證。 – Riaan 2010-09-13 13:45:14
bzlm的解決方案有效,但他並沒有真正充實它。得到https://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx一些代碼,即safeTokenHandle類和依賴。 – 2018-01-08 16:00:34
非常優雅的解決方案靈感來自http://social.msdn.microsoft.com/Forums/vstudio/en-US/287ca606-86da-4794-baed-2ad5db9bc833/access-to-remote-folder。這個只使用.Net庫,不需要使用任何命令行或Win32 API。
代碼隨時參考:
NetworkCredential theNetworkCredential = new NetworkCredential(@"domain\username", "password");
CredentialCache theNetCache = new CredentialCache();
theNetCache.Add(new Uri(@"\\computer"), "Basic", theNetworkCredential);
string[] theFolders = Directory.GetDirectories(@"\\computer\share");
您可以使用WebClient類連接到使用證書的網絡驅動程序。包括下面的命名空間:
using System.Net;
WebClient request = new WebClient();
request.Credentials = new NetworkCredential("domain\username", "password");
string[] theFolders = Directory.GetDirectories(@"\\computer\share");
Directory.GetDirectories與WebClient無關 - 它們恰好是您示例中相鄰的代碼行 – alastairtree 2017-11-14 15:55:55
- 1. SSIS:使用不同的用戶名和密碼訪問網絡驅動器
- 2. 使用用戶名密碼在網絡驅動器上訪問文件夾
- 3. Powershell:如何使用不同的用戶名/密碼映射網絡驅動器
- 4. 使用Powershell連接到使用用戶名/密碼的網絡文件夾
- 5. 無法使用路徑和密碼映射網絡驅動器
- 6. 使用SharePoint 2007連接到網絡上的共享驅動器
- 7. 如何連接到需要用戶名和密碼的網站
- 8. 連接到需要用戶名,密碼和使用Axis2/C
- 9. 使用用戶名和密碼連接到SQL Server
- 10. 如何使用用戶名和密碼連接到mscrm?
- 11. 通過使用用戶名和密碼連接到webservice
- 12. 如何使用本機node.js驅動程序連接用戶名/密碼到mongodb驅動程序
- 13. 使用Java的映射網絡驅動器未連接
- 14. Android自動填充網絡登錄用戶名和密碼
- 15. 的Java Applet網絡URL連接的用戶名和密碼可見
- 16. 如何發送用戶名和密碼到網絡服務
- 17. 如何使用IP,用戶名和密碼連接到服務器?
- 18. 使用用戶名和密碼將用戶連接到數據庫
- 19. 用用戶名和密碼使用Java客戶端連接到RavenDb
- 20. 在Windows上使用用戶名和密碼從網絡瀏覽器登錄
- 21. 使用android.net.wifi.ScanResult自動登錄到用戶名/密碼保護的wifi網絡
- 22. 使用用戶名和密碼時的Rabbitmq連接問題
- 23. 如何連接使用的用戶名和密碼
- 24. SQL連接使用域用戶名和密碼
- 25. 使用ActiveMQ JMS連接的用戶名和密碼
- 26. C#使用用戶名/密碼連接到Azure AD
- 27. 動態提供連接字符串的用戶名和密碼
- 28. 連接到沒有用戶名/密碼的遠程機器
- 29. mysql連接(端口,用戶名,密碼)
- 30. vbscript獲取網絡驅動器的登錄用戶名
我相信這是一個更普遍的方式:http://stackoverflow.com/questions/295538/how-to-provide-user-name-and-password-when-connecting- to-a-network-share/39540451#39540451 – 2016-09-16 21:42:01
請查看此解決方案http://stackoverflow.com/questions/295538/how-to-provide-user-name-and-password-when-connecting-to-a -network-share/39540451#39540451 – 2017-01-04 19:57:48