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

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 に答える