Подключение к удаленному рабочему столу с использованием process.startinfo
Я создал веб-страницу asp.net, и с веб-страницы я использую приведенный ниже код для установки подключения к удаленному рабочему столу.
rdp.exe это внешний файл
Вот мой код
Protected Sub BtnRemote_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtnRemote.Click
Dim Process As New System.Diagnostics.Process
Dim startinfo As New System.Diagnostics.ProcessStartInfo
startinfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal
startinfo.FileName = "C:\WINDOWS\system32\cmd.exe"
Dim path = "D:\rdp.exe"
startinfo.Arguments = path + "/v:" + txtTerminal.Text + " " + "/u:" + txtTerUser.Text + " " + "/p:" + txtTerPassword.Text
startinfo.UseShellExecute = False
Process.Start(startinfo)
End Sub
Все хорошо, когда я отлаживаю, но система не установит удаленное соединение.
Но если я использую следующую команду из командной строки, я могу установить удаленное соединение.
E:\rdp /v:"IPAddress" /domain:"domain" /u:"username" /p:"password"
1 ответ
Проблема, с которой я могу столкнуться, находится внутри этой строки (также обратите внимание, что у него есть путь, пользователь, пароль и IP, НО отсутствует аргумент домена):
startinfo.Arguments = path + "/v:" + txtTerminal.Text + " " + "/u:" + txtTerUser.Text + " " + "/p:" + txtTerPassword.Text
как указано в ваших аргументах CMD, он должен соответствовать этому формату:
E:\rdp /v:"IPAddress" /domain:"domain" /u:"username" /p:"password"
Однако, если вы заметили, что ваш startinfo.arguments не содержит пробела между каталогом и строкой IP-адреса, так что вместо чтения его так:
E:\rdp /v:"IPAddress" /u:"username" /p:"password"
это читает это так:
E:\rdp/v:"IPAddress" /u:"username" /p:"password"
просто зафиксируйте строку следующим образом:
startinfo.Arguments = path + " /v:" + txtTerminal.Text + " /u:""" + txtTerUser.Text + """ /p:" + txtTerPassword.Text
Я также удалил конкатенации + " " +, потому что все, что вам действительно нужно, это пробел перед / и он все равно будет работать должным образом. Также обратите внимание, что я добавил дополнительные кавычки, потому что, если имя пользователя поддерживает пробелы, тогда, когда оно идет, чтобы установить аргумент, если имя пользователя содержит пробел, то он будет считать их как два отдельных аргумента, заключенных в кавычки, которые предотвращают его разделение на два разных аргумента.
Кроме того, вместо использования CMD, почему бы не запустить EXE непосредственно
Dim p As Process
p.startinfo.FileName = "D:\rdp.exe"
p.StartInfo.WorkingDirectory = "D:\"
startinfo.Arguments = path + " /v:" + txtTerminal.Text + " /u:""" + txtTerUser.Text + """ /p:" + txtTerPassword.Text
p.Start()