获取映射驱动器VB.net的UNC路径

获取映射驱动器VB.net的UNC路径,vb.net,mapping,Vb.net,Mapping,我需要从映射驱动器获取UNC路径。 我尝试使用WNetGetConnection,但它对我无效。它返回错误487。 有人知道如何处理此错误或以任何其他方式获取UNC路径吗?您可以使用该API。完全同意@Alex K的p/Invoke建议,我只想发布一个通过net use命令进行管道连接的黑客方法: 这对我来说很好,而且比上的api调用更简单 唯一的问题是我必须添加一行代码来调暗变量行 感谢您的帮助@rbsoft.sol,请转到命令行并运行net use v:,将v:替换为映射驱动器。你看到一行写

我需要从映射驱动器获取UNC路径。 我尝试使用WNetGetConnection,但它对我无效。它返回错误487。
有人知道如何处理此错误或以任何其他方式获取UNC路径吗?

您可以使用该API。

完全同意@Alex K的p/Invoke建议,我只想发布一个通过net use命令进行管道连接的黑客方法:


这对我来说很好,而且比上的api调用更简单 唯一的问题是我必须添加一行代码来调暗变量行


感谢您的帮助

@rbsoft.sol,请转到命令行并运行net use v:,将v:替换为映射驱动器。你看到一行写着远程名称吗?@Chris..不,我知道网络连接找不到..我使用的是net use c:@rbsoft.sol,除非你有一个非常奇怪的设置,否则你的c:驱动器应该是本地驱动器,而不是网络驱动器。这篇文章只是关于网络驱动器的。@goku_da_master,你不想使用它有几个原因。首先,您必须首先测试它,以查看它所使用的操作系统版本,而WNetGetUniversalName的文档直接告诉您,Win2K支持它。其次,此方法依赖于字符串解析,如果文本不完全相同,例如,如果/当出现新版本,或者如果存在net命令的本地化版本,则会中断字符串解析。第三,API将为您提供更多信息,例如错误连接无效或错误网络。@goku_da_master,作为解决方案的发起人,我可能会使用它,我只是不推荐它。如果你读过Raymond Chen的博客,你就会知道微软在修复别人的漏洞方面受到了诅咒,因为他们的工作方式似乎是可行的,而不是官方记录的方式。与Windows一起安装的大多数垫片系统都是这种情况的结果。此外,这不是一个真正的托管解决方案,因为您仍然在调用非托管资源net.exe,而不是P/Invoking。但如果这对你有用,那也太好了!欢迎来到SO!这个答案似乎更适合作为评论,而不是回答上述问题。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim RemotePath = GetUncSourcePath("v"c)
    If String.IsNullOrEmpty(RemotePath) Then
        Trace.WriteLine("there was an error")
    Else
        Trace.WriteLine(RemotePath)
    End If
    Me.Close()
End Sub
Private Shared Function GetUncSourcePath(ByVal driveLetter As Char) As String
    If String.IsNullOrEmpty(driveLetter) Then Throw New ArgumentNullException("driveLetter")
    If (driveLetter < "a"c OrElse driveLetter > "z") AndAlso (driveLetter < "A"c OrElse driveLetter > "Z") Then Throw New ArgumentOutOfRangeException("driveLetter", "driveLetter must be a letter from A to Z")
    Dim P As New Process()
    With P.StartInfo
        .FileName = "net"
        .Arguments = String.Format("use {0}:", driveLetter)
        .UseShellExecute = False
        .RedirectStandardOutput = True
        .CreateNoWindow = True
    End With
    P.Start()
    Dim T = P.StandardOutput.ReadToEnd()
    P.WaitForExit()
    For Each Line In Split(T, vbNewLine)
        If Line.StartsWith("Remote name") Then Return Line.Replace("Remote name", "").Trim()
    Next
    Return Nothing
End Function