#c# #process #rdp
#c# #процесс #rdp
Вопрос:
Я хочу создавать свои собственные программы Rdp с помощью c #. Вот почему я создал экран страницы входа в систему и ввел данные для входа от пользователя. После этого, чтобы запустить процесс rdp, я использовал этот код.
Process rdcProcess = new Process();
rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%system32cmdkey.exe");
rdcProcess.StartInfo.Arguments = $"/generic:TERMSRV/{ipaddressbox.Text} /user: {usernamebox.Text} /pass: {passwordbox.Text}";
rdcProcess.StartInfo.FileName = Environment.ExpandEnvironmentVariables(@"%SystemRoot%system32mstsc.exe");
rdcProcess.StartInfo.Arguments = $"/v {ipaddressbox.Text}"; // ip or name of computer to connect
rdcProcess.Start();
Когда я вхожу в систему, используя свои пользовательские данные, открывается форма, и программа rdp работает без каких-либо проблем. Однако, когда я закрываю этот экран формы, подключение к удаленному рабочему столу не прерывается, оно продолжает работать в фоновом режиме. Моя просьба заключается в том, что когда я закрываю форму, подключение к удаленному рабочему столу отключается и завершает процесс rdp. Как я могу этого добиться?
Комментарии:
1. Чтобы убить процесс, который вы можете использовать
Process.GetProcessesByName("rdp...").FirstOrDefault().Kill();
, я не уверен, можно ли корректно отключить RDP.2. Вы правы, но я хочу сделать это программно, я имею в виду, что уничтожение процесса должно произойти, когда форма закрыта
3.
tsdiscon sessionid
и,LOGOFF sessionid
похоже, работает. Смотрите: sourcedaddy.com/windows-7/disconnecting-sessions.html4. я попробую, большое спасибо
Ответ №1:
Я решил проблему. Когда я закрыл экран rdp, процесс mstsc умирал. Я написал блок if, который проверяет это, и вышел из программы, если процесс mststc не был запущен.
Process[] pname = Process.GetProcessesByName("mstsc.exe");
if (pname.Length == 0)
{
Application.Exit();
}