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