2015-03-20 3 views
0

поэтому у меня проблемы с командой «net use» в C#. В основном, я использую код, написанный here. Код работает отлично, однако у меня есть несколько идентификаторов, которые необходимо использовать последовательно. К сожалению, при попытке подключиться к другому ID, соединение остается в «чистом использовании» в Windows, так что это исключение:C# 0 net использование подключение

Win32Exception: Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed. 

Теперь меня, очевидно, что было бы выполнить из командной строки программно удалите соединение, когда я закончил использовать его. Вот код, который я бегу, чтобы удалить соединение:

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = "/K net use delete \\IPAddrofserver"; 
process.StartInfo = startInfo; 
process.Start(); 

Я использую только/к, так что я могу видеть, если команда работает. После выполнения этого кода он говорит: «Не удается найти сетевое соединение». Однако, если я вручную открою меню «Пуск» и введите «net use», я смогу увидеть и удалить соединение. Я думаю, что это может быть связано с тем, что при запуске командной строки программно, я замечаю, что ему присваивается административная привилегия, а не под управлением моего токена пользователя, но я не могу быть уверен. Любая помощь в этом отношении была бы весьма признательна.

EDIT: добавление кода удаления командной строки во время WnetCancelConnection2 действительно работает правильно и удаляет соединение из сети. Однако проверка использования сети вручную вне программы показывает, что история соединения все еще существует и открыта. Команда whoami показывает одного и того же пользователя. Любая причина, по которой существует несоответствие между тем, что происходит программно, и тем, что происходит, когда я проверяю вручную?

ответ

0

Возможно, вам необходимо запустить свой процесс с повышенными привилегиями. См. accepted answer here, как это сделать. Вы также можете позвонить по телефону relevant Windows API, чтобы избежать нереста других процессов и устранения этих осложнений.

+0

Странно, что я думаю, что мне действительно могут потребоваться уменьшенные разрешения. Вход в систему как пользователь и использование сети, я могу видеть соединение, которое необходимо удалить. Этот процесс запускается только как cmd.exe. Но с использованием вышеуказанного кода он работает как cmd.exe (Administrator) и не может просмотреть соединение. Разве это не означает, что запрос cmd уже запущен как административный процесс? – user2044754

+0

Две вещи: 1. Запуск в качестве администратора - это не то же самое, что работа с повышенными привилегиями. Для работы с повышенными привилегиями требуется подтверждение UAC (или подписание кода, как описано в связанных ответах), и позволяет пользователю использовать административные привилегии, которые у них есть. 2. Выполняются ли ваши родительские и дочерние процессы как два разных пользователя? Если это так, я не удивлюсь, что они не могут видеть токены сетевого подключения друг друга. – jlew

+0

1. Высота UAC будет невозможна при ограничениях, связанных с предоставленным мной решением. 2. Родительские и дочерние процессы - это один и тот же пользователь. Я проверил, используя команду «whoami» в каждом окне cmd, возвратил тот же ответ. Мне кажется странным, что программа может начать соединение, но потом не может ее удалить. Разве нет более естественного способа сделать это? – user2044754

Смежные вопросы