Подключение к удаленному рабочему столу с использованием 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()
Другие вопросы по тегам