在 Windows 7 上查询win32_NetworkConnection很慢
本文关键字:NetworkConnection 很慢 win32 查询 Windows | 更新日期: 2023-09-27 18:33:59
伙计们,
多年来,我一直很高兴地使用以下C# IsNetworkDrive方法来确定Windows XP下的"这是网络驱动器吗?在 Windows 7 下,它仍然会产生预期的结果,但每次调用需要大约 10 秒的时间......因此,大约一百万倍太长了!
using System;
using System.Collections.Generic;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
foreach (var driveName in Environment.GetLogicalDrives())
Console.WriteLine(driveName + " " + IsNetworkDrive(driveName.Substring(0,2)));
Console.Write("Press any key to continue ...");
Console.ReadKey();
}
private static bool IsNetworkDrive(string drive)
{
var query = @"SELECT Name FROM win32_NetworkConnection WHERE LocalName='" + drive + "'";
var seacher = new ManagementObjectSearcher(query);
var resultset = seacher.Get();
var count = resultset.Count;
return count == 1;
}
}
}
嘎嘎。我讨厌窗户!
请有人知道如何[性能]确定给定的驱动器号是代表Windows 7和Windows XP(企业SOE)上的本地驱动器还是网络驱动器????
[最好是在 .NET <= 3.5 中,虽然我可以将项目升级到 4.0,但它只需要一个绿地测试,我们现在没有钱。叹息。
大家干杯。基思。
我正在回答我自己的问题。
更多的谷歌搜索将我带到这篇文章:如何以编程方式发现系统上的映射网络驱动器及其服务器名称?
这个问题中的代码引导我到:DriveInfo.GetDrives(),我将其工作到我的主方法中:
static void Main(string[] args) {
foreach (var driveInfo in DriveInfo.GetDrives())
Console.WriteLine(driveInfo + " " + driveInfo.DriveType);
Console.Write("Press any key to continue ...");
Console.ReadKey();
}
产生:
C:' Fixed
D:' CDRom
E:' Removable
G:' Network
H:' Network
I:' Network
K:' Network
L:' Network
M:' Network
Q:' Network
Press any key to continue ...
。然后离那里不远了:
// Example drives: "C:" or "L:" ... just the drive-letter and a colon. No backslash.
private static bool IsNetworkDrive(string drive) {
return new DriveInfo(drive).DriveType == DriveType.Network;
}
在 Windows 7 下的预期 [亚秒] 时间范围内生成预期结果,以非管理员身份运行。
希望这对其他人有所帮助。
大家干杯。基思。