1

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

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

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

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


...

network.RemoveNetworkDrive("z:");          
4

2 回答 2

1

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

于 2017-05-31T23:12:02.157 回答
-1

只需使用 Process.Start

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);
}

因为如果您正在创建驱动器映射,那么您肯定知道哪些驱动器号需要空闲,而不是吹走所有网络驱动器映射。

于 2013-07-11T23:12:52.107 回答