在 VB .NET 中查找并启动 *** 连接
Posted
技术标签:
【中文标题】在 VB .NET 中查找并启动 *** 连接【英文标题】:Find and start a *** connection in VB .NET 【发布时间】:2010-09-25 20:53:46 【问题描述】:我正在使用NetworkInterface.GetAllNetworkInterfaces() 获取PC 上的所有接口。但是,这似乎只返回“活动”接口。如何在 .NET 中找到“非活动”网络接口,例如未连接的 ***、禁用的 NIC 等。
我想在“控制面板”->“网络连接”中按名称找到它们。因此,例如,如果我有一个名为“我的工作”的 ***,我希望能够使用“我的工作”这个名称找到它。
使用 Win32_NetworkAdapterConfiguration 似乎不是一个选项,因为它不会返回“网络连接”中显示的名称(据我所知)。
非常感谢,
RB。
【问题讨论】:
我在下面的答案中添加了有关 Win32_NetworkAdapter 类的信息 - 希望这更符合您的要求 感谢 Paul - 现在正在调查。我有一个特定于 *** 的解决方案,其中涉及到“rasdial.exe”,但它不是......漂亮......无论如何我会在几分钟内发布它以获取信息! 【参考方案1】:这个使用 WMI 的示例可能会帮助您了解大部分情况(顺便说一下关于 C# 的问题!):
using System.Management;
string query = "SELECT * FROM Win32_NetworkAdapterConfiguration";
ManagementObjectSearcher moSearch = new ManagementObjectSearcher(query);
ManagementObjectCollection moCollection = moSearch.Get();
// Every record in this collection is a network interface
foreach (ManagementObject mo in moCollection)
// Do what you need to here....
为了测试适配器是否启用,这个链接应该会有所帮助:
Win32_NetworkAdapterConfiguration class
编辑:Win32_NetworkAdapter 类可能会让您更幸运 - 它具有标题和描述属性,可能为您提供所需的内容。有一种方法可以将此信息与我提到的上一课程联系起来,以获取 IP 地址等 - 如果没有进一步研究,不确定它是什么,但如果您需要知道,请告诉我。
【讨论】:
嗨,保罗。 “NetConnectionID”将显示我的 NIC 的名称(例如“本地连接”),但不会为我的 *** 显示此名称,即使它已连接。不过感谢您的帮助。【参考方案2】:好的,这是我用来检测命名 *** 的 hacky 解决方案。如果由于某种原因(包括网络连接断开、*** 不存在等)无法连接到 ***,它会抛出错误。
要测试的具体错误代码包括:
远程访问错误 800 - 无法建立 *** 连接。 *** 服务器可能无法访问,或者安全参数可能无法访问 为此连接正确配置。
远程访问错误 623 - 系统找不到电话簿 此连接的条目。
它并没有真正回答我提出的问题(尽管它足以解决现实生活中的问题)。
Dim p As New Process
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.RedirectStandardError = True
p.StartInfo.FileName = "rasdial.exe"
p.StartInfo.Arguments = """Company HQ"""
p.Start()
If Not p.WaitForExit(My.Settings.***Timeout) Then
Throw New Exception( _
String.Format("Connecting to ""0"" *** failed after 1ms", s***, My.Settings.***Timeout))
End If
If p.ExitCode <> 0 Then
Throw New Exception( _
String.Format("Failed connecting to ""0"" with exit code 1. Errors 2", s***, p.ExitCode, p.StandardOutput.ReadToEnd.Replace(vbCrLf, "")))
End If
【讨论】:
【参考方案3】:好的 - 最后的努力:)
Win32_NetworkConnection 类怎么样 - 我很确定这将处理 *** 连接
【讨论】:
在我的机器上,这显示了我所有的映射驱动器,以及我打开的所有网络共享。它不显示 ***,即使它们已连接 :-( 感谢您的帮助 :-) 臭虫 - 你需要的信息必须在 WMI 的某个地方 - 只是通过文档找到正确的类的一个案例 :o( 很高兴你找到了解决方法【参考方案4】:RasDialer dialer = new RasDialer();
ReadOnlyCollection<RasConnection> connections = dialer.GetActiveConnections();
foreach (RasConnection connection in connections)
// Do what you want to with the connections.
这将检索 Windows 正在使用的所有已连接拨号条目(包括 *** 连接)及其相关句柄和其他信息。
该组件是 CodePlex 上 DotRas 项目的一部分。
http://www.codeplex.com/DotRas
【讨论】:
嗨,Jeff,这正是我想要的正是。稍后我将下载源代码,以了解您是如何编写如此神奇的魔法的!非常非常感谢:-)以上是关于在 VB .NET 中查找并启动 *** 连接的主要内容,如果未能解决你的问题,请参考以下文章
使用VB.NET在MSSQL中根据一个字段值进行查找相同的字段的另一个别名值怎么写?