【问题标题】:Virtual Machine, Remote Desktop, SendKeys C#虚拟机、远程桌面、SendKeys C#
【发布时间】:2015-01-30 19:49:25
【问题描述】:

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

  1. 启动命令提示符 thread.sleep 足够长的时间来断开 RDP 会话(10 秒,如果更长就可以了)

  2. 发送键到命令提示符以启动在交互模式下工作的 exe。一个完美的例子是 FTP。如果您在没有参数的情况下启动 FTP,您会得到一个交互式提示。关于安全性的故事由来已久,但命令行参数不起作用,它需要是交互式的。连接到 RDP 时,此过程不会运行

除了一个主要问题外,我一切正常。一旦我与 RDP 断开连接,就没有键盘可供 sendkeys 使用。我不记得确切的错误,但基本上是“没有连接键盘”

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

我已经验证了进程,即使是命令提示符下的 DOS 也会在断开 RDP 后继续运行。该问题与未连接时的发送键和虚拟机键盘有关。

我搜索了高低,但这一个让我难住了。我知道这是一种解决方法,而不是从源头上解决问题,但我只有这个选项。

我能想到的唯一其他选择是,如果像 SendKeys 一样工作但在没有连接键盘的情况下也能工作?

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

规则是:

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

  2. 所有东西都必须使用 VS2012 C# .net 到 4.5 从头开始​​构建。

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

非常感谢任何想法。

【问题讨论】:

  • 在我看来就像XY problem
  • 您对 XY 的正确看法。我只想保存侧边栏并专注于特定问题。如果甚至可以通过 C# 在 VM 上进行击键自动化。要在连接到 RDP 时启动进程,请断开连接并继续进程。

标签: c# keyboard virtual-machine sendkeys


【解决方案1】:

当你创建你的 Process 对象时,适当地设置 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
}

取自here

发送一些你可以简单使用的东西:

proc.StandardInput.WriteLine("Something");

您可以简单地在 while 循环中检查一些触发器,然后将一些数据写入流中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多