Bạn có thể sử dụng đường dẫn UNC (bắt đầu bằng \\
) trực tiếp trong đường dẫn của bạn. Tuy nhiên, bạn phải tính đến thông tin đăng nhập cho kết nối này, đây có thể là một phần khó khăn.
Có một số phương pháp:
Nếu remote system đang trên cùng một tên miền hay có một mối quan hệ tin tưởng giữa các lĩnh vực, và người sử dụng chương trình bạn đang chạy như có quyền truy cập thích hợp, nó sẽ " chỉ làm việc ".
Bạn có thể trình bày và thực thi lệnh net use
(thông qua chương trình Windows net.exe
) để thực hiện kết nối với tên người dùng và mật khẩu cụ thể. Hãy lưu ý rằng kết nối có thể sử dụng được bởi bất kỳ chương trình nào đang chạy trong phiên của người dùng, không chỉ là ứng dụng của bạn. Sử dụng lệnh /DELETE
để xóa kết nối khi bạn hoàn tất. Cú pháp điển hình là: net use \\computername\sharename password /USER:domain\username
.
Bạn có thể P/Gọi WNetAddConnection2
để hoàn thành cùng một điều như net use
mà không cần trục xuất đến net.exe
. Bằng cách chuyển NULL thành lpLocalName
, không có ký tự ổ đĩa nào được gán, nhưng tên người dùng và mật khẩu sẽ áp dụng cho các truy cập tiếp theo được thực hiện thông qua đường dẫn UNC. Có thể sử dụng chức năng WNetCancelConnection2
để ngắt kết nối.
Bạn có thể P/Gọi LogonUser
với cờ LOGON32_LOGON_NEW_CREDENTIALS
theo sau là một mạo danh để thêm thông tin đăng nhập từ xa bổ sung vào chuỗi của bạn. Không giống như # 2 và # 3, các hiệu ứng trên toàn bộ phiên của người dùng sẽ bị hạn chế hơn một chút. (Trên thực tế, điều này hiếm khi được thực hiện ủng hộ giải pháp nổi tiếng WNetAddConnection2
.)
Sau đây là một ví dụ về cách gọi WNetAddConnection2
từ VB.NET.
Private Sub Test()
Dim nr As New NETRESOURCE
nr.dwType = RESOURCETYPE_DISK
nr.lpRemoteName = "\\computer\share"
If WNetAddConnection2(nr, "password", "user", 0) <> NO_ERROR Then
Throw New Exception("WNetAddConnection2 failed.")
End If
'Code to use connection here.'
If WNetCancelConnection2("\\computer\share", 0, True) <> NO_ERROR Then
Throw New Exception("WNetCancelConnection2 failed.")
End If
End Sub
<StructLayout(LayoutKind.Sequential)> _
Private Structure NETRESOURCE
Public dwScope As UInteger
Public dwType As UInteger
Public dwDisplayType As UInteger
Public dwUsage As UInteger
<MarshalAs(UnmanagedType.LPTStr)> _
Public lpLocalName As String
<MarshalAs(UnmanagedType.LPTStr)> _
Public lpRemoteName As String
<MarshalAs(UnmanagedType.LPTStr)> _
Public lpComment As String
<MarshalAs(UnmanagedType.LPTStr)> _
Public lpProvider As String
End Structure
Private Const NO_ERROR As UInteger = 0
Private Const RESOURCETYPE_DISK As UInteger = 1
<DllImport("mpr.dll", CharSet:=CharSet.Auto)> _
Private Shared Function WNetAddConnection2(ByRef lpNetResource As NETRESOURCE, <[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpPassword As String, <[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpUserName As String, ByVal dwFlags As UInteger) As UInteger
End Function
<DllImport("mpr.dll", CharSet:=CharSet.Auto)> _
Private Shared Function WNetCancelConnection2(<[In](), MarshalAs(UnmanagedType.LPTStr)> ByVal lpName As String, ByVal dwFlags As UInteger, <MarshalAs(UnmanagedType.Bool)> ByVal fForce As Boolean) As UInteger
End Function
Nguồn
2010-02-28 19:34:55
Bạn có gặp sự cố cụ thể không? Không nên có bất cứ điều gì khác mà bạn cần phải làm để xử lý các đường dẫn UNC so với các ổ đĩa được ánh xạ. –