使用process.startinfo进行远程桌面连接

时间:2016-02-04 12:15:04

标签: vb.net-2010 remote-desktop

我创建了一个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 个答案:

答案 0 :(得分:0)

我可以看到的问题在于这一行(另请注意,它有路径用户密码 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()