2013-07-11 2 views
0

나는 공유 네트워크 위치에 대한 연결을 만들려면 아래에 다음 줄을 사용하고 있지만, 문제는 (내가 생각하는) 모든 연결을 활성으로, network.MapNetworkDrive("..") 오류가 발생합니다입니다 :"net use */delete"는 C#에서와 동일합니까?

Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. Disconnect all previous connections to the server or shared resource and try again.

나는이 통과 얻었다을 명령 줄에서 net use * /delete을 사용하여 오류가 발생하지만 C#에서 이에 해당하는 명령이 있습니까?

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


... 

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

'network.RemoveNetworkDrive ("z :")'당신을 위해하지 않았습니까? –

+1

존재하지 않는 매핑을 삭제해도 오류가 발생하지 않으면 먼저 z가 있는지 확인하거나 먼저 삭제하십시오. 물론 그것이 존재한다는 사실은 사용자가 그 편지를 사용하여 자신의 매핑을 가지고 있다는 것을 의미 할 수 있습니다. 그리고 당신은 그것을 닦아 내면 그들을 대단히 자극 할 것입니다 ... –

답변

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

때문에 당신이 본질적으로 문자 멀리 모든 네트워크 드라이브 매핑을 불어 반대로 무료로 할 필요가 드라이브를 알 드라이브 매핑을 만들 확실합니다.

+3

물론 확실하지만 C# 상당합니다. 네이티브 대안을 사용할 수있을 때 DOS에 떨어 뜨리지 않고 명령 줄 유틸리티를 실행합니다. –

+0

그것은 '네이티브'로서 얻을 수있는 대안입니다. 관리되는 코드 대안을 원한다면, 확실하게 수행 할 수 있지만 명령 행 프로세스를 사용하는 것이 아닌 드라이버는 무엇입니까? – nathanchere

+1

CMD.exe는이 기능을 수행하기위한 다른 프로그램을'Process.Start() '하지 않습니다. 그냥 선생님. –

0

그냥 사용 System.Diagnostics.Process.Start ("CMD.exe", "/ c net use */delete/y");