虚拟机、远程桌面、SendKeys C#

虚拟机、远程桌面、SendKeys C#,c#,keyboard,virtual-machine,sendkeys,C#,Keyboard,Virtual Machine,Sendkeys,我尝试对通过RDP访问的VM执行以下操作: 启动命令提示符 thread.sleep足够长,可以断开RDP会话(10秒,如果更长,则可以) Sendkeys到命令提示符以启动在交互模式下工作的exe。FTP就是一个很好的例子。如果在没有参数的情况下启动FTP,则会得到一个交互式提示。这是一个关于安全性的长篇大论,但命令行参数将不起作用,它需要是交互式的。。连接到RDP时,此进程将不会运行 除了一个大问题外,我什么都做得很好。一旦我断开与RDP的连接,sendkeys就没有键盘可供使用。我一时记不

我尝试对通过RDP访问的VM执行以下操作:

  • 启动命令提示符 thread.sleep足够长,可以断开RDP会话(10秒,如果更长,则可以)

  • Sendkeys到命令提示符以启动在交互模式下工作的exe。FTP就是一个很好的例子。如果在没有参数的情况下启动FTP,则会得到一个交互式提示。这是一个关于安全性的长篇大论,但命令行参数将不起作用,它需要是交互式的。。连接到RDP时,此进程将不会运行

  • 除了一个大问题外,我什么都做得很好。一旦我断开与RDP的连接,sendkeys就没有键盘可供使用。我一时记不起确切的错误,但基本上是“没有连接键盘”

    我有一个想法,也许我可以创建一个虚拟键盘,当RDP会话结束时,它仍然可以“连接”

    我已经验证了进程,甚至命令提示符下的DOS,在断开RDP后将继续运行。未连接时,问题与发送键和虚拟机键盘无关

    我到处寻找,但这一次把我难住了。我知道这是一个解决办法,而不是从源头上解决问题,但我只有这个选择

    我唯一能想到的另一个选择是,如果像SendKeys这样的东西可以像SendKeys那样工作,但不需要连接键盘就可以工作

    编辑 只是想说清楚一点。我已经找到了许多其他可行的解决方案,但我只剩下这个想法

    这些规则是:

  • 不能在VM上安装任何东西,例如“测试自动化”工具

  • 所有东西都必须使用VS2012 C#.net从零开始构建,最高可达4.5

  • 也许我可以找到一个开源的测试自动化工具,但是没有时间去研究和转换看起来可能很复杂的应用程序


    非常感谢您的任何想法。

    当您创建流程对象时,请适当设置StartInfo:

    var proc = new Process {
        StartInfo = new ProcessStartInfo {
            FileName = "program.exe",
            Arguments = "command line arguments to your executable",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        }
    };
    
    然后启动流程并从中读取:

    proc.Start();
    while (!proc.StandardOutput.EndOfStream) {
        string line = proc.StandardOutput.ReadLine();
        // do something with line
    }
    
    取自

    要发送内容,您只需使用:

    proc.StandardInput.WriteLine("Something");
    

    您只需在while循环中检查一些触发器,然后向流中写入一些数据。

    在我看来,这就像您对XY的正确认识一样。我只想保存侧边栏,集中精力解决特定的问题。如果甚至可以通过C#在虚拟机上实现按键的自动化。要在连接到RDP时启动流程,请断开连接,然后流程继续。