"net use * /delete" equivalent in C#?

本文关键字:quot in equivalent net use delete | 更新日期: 2023-09-27 18:21:59

我正在使用下面的行创建到共享网络位置的连接,但问题是任何连接都处于活动状态(我认为),network.MapNetworkDrive("..")将抛出错误:

同一用户到服务器或共享资源的多个连接,不允许使用多个用户名。断开以前的所有连接连接到服务器或共享资源,然后重试。

我从命令行使用net use * /delete通过了这个错误,但C#中有等效的命令吗?

IWshNetwork_Class network = new IWshNetwork_Class();
network.MapNetworkDrive("z:", @shared_path, Type.Missing, "Admin", "!QAZxsw2");

...
network.RemoveNetworkDrive("z:");          

"net use * /delete" equivalent in C#?

只需使用System.Diagnostics.Process.Start("CMD.exe","/c net use*/delete/y");

只需使用Process.启动

System.Diagnostics.Process.Start("CMD.exe","/c net use * /delete");

如果你坚持使用托管代码方法(为什么?),你可以做一些类似的事情:

foreach(var letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ")
{
   try {
       network.RemoveNetworkDrive(letter + ":");
   } catch {}
}

或者更好的是(取决于你对所需行为的灵活性),迭代这个:

// assumes using System.IO
var networkDrives = DriveInfo.GetDrives().Where(x => x.DriveType == DriveType.Network))
foreach(var networkDrive in networkDrives)

我仍然会选择只使用Process.Start,因为它更干净、更可靠。一旦你开始重新实现"琐碎"的功能,你通常会很快发现它是多么的平凡

关于为什么你的问题本身可能需要重新考虑——为什么你坚持要删除所有网络驱动器映射?如果您正在映射Z:例如,您知道需要取消映射哪个驱动器。你可以有这样的东西:

public void MapDrive(char driveLetter, string networkPath, string userName, string password)
{
   try { network.RemoveNetworkDrive(driveLetter + ":"); } catch {}
   network.MapNetworkDrive(driveLetter  + ":", @shared_path, Type.Missing, username, password);
}

因为如果你正在创建驱动器映射,你肯定知道哪些驱动器号需要是免费的,而不是把所有的网络驱动器映射都销毁。