如何通过API向我的exe发送命令

问题描述:

我有一个我创建的控制台应用程序。下面是代码:如何通过API向我的exe发送命令

[Guid("fa3ff58b-05a9-4c1a-85d0-f7bf0188ffbf")] 
[ClassInterface(ClassInterfaceType.None)] 
[ProgId("ConsoleWindow.Program")] 
public class Program 
{ 
    public Window myWindow = new Window(); 
    public static void Main(string[] args) 
    { 
    } 
} 

[Guid("fa3ff58b-05a9-4c1a-85d0-f7bf0188ffbf")] 
[ClassInterface(ClassInterfaceType.None)] 
[ProgId("ConsoleWindow.Window")] 
public class Window 
{ 
    public Window() 
    { 
     Console.WriteLine("Console Window has been launched"); 
     Console.WriteLine("Waiting for input..."); 
    } 

    [DispId(1)] 
    public void WriteToScreen(string text) 
    { 
     Console.WriteLine(text); 
    } 
} 

我再有,我已经提到的EXE揭露API 我的测试是这样的一个测试项目:

[TestClass] 
public class UnitTest1 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     Program myProg = new Program(); 
     myProg.myWindow.WriteToScreen("example text to display"); 
    } 
} 

一切都建立好的,但它不” t似乎在运行测试时启动exe,也不会写入窗口。有没有办法让我在创建它的实例时“启动”exe文件?

道歉,如果我这样做是完全错误的。

+0

所以它不是一个理想的解决方案,但现在即时诉诸使用SendKeys – Festivejelly 2014-11-07 12:38:25

是的,你完全错了。如果你直接想要启动exe,你必须使用Process.Start。你不能做你想做的事。如果你想启动一个exe文件并且写一些东西给它的输出(控制台),你必须启动exe作为进程并连接到它。例如通过TCP/IP,Namedpipes或其他。

该测试是一个没有控制台的单一应用程序,正如您所期望的那样。

这里:

Program myProg = new Program(); 
     myProg.myWindow.WriteToScreen("example text to display"); 

您只创建PROGRAMM类的实例,但它在您的测试运行。

+0

我不确定你的意思是什么你的应用程序创建一个程序类的实例。该实例已经被创建并且引用了已经被实例化的Window类。 – Festivejelly 2014-11-06 14:17:35

+0

我明白通过Process.Start启动EXE是有道理的。但是,我真的希望能够通过API发送命令,而不是通过管道或任何其他gubbins发送命令。 – Festivejelly 2014-11-06 14:21:12

+0

哪个API或窗口?也许我没有得到你想要的东西。 – BendEg 2014-11-06 14:22:15

你试图做些什么?

如果要启动的应用程序EXE并获得控制台输出你要做的:

public class Program 
{ 
    public Window myWindow = new Window(); 
    public static void Main(string[] args) 
    { 
    Program myProg = new Program(); 
    myProg.myWindow.WriteToScreen("example text to display"); 
    } 
} 



如果你想在单元测试,以检查是否输出工作试试这个问题:

Unit Test Help. How do I test for a message output to console?

在评论中讨论后我提出这个解决方案:

  • 为你的测试创建TestSuit [1]
  • 使用TestFixtureSetUp到控制台与Console.SetOut重定向到写此目的
  • 写入到控制台测试中创造了一个窗口

高度实验^ _ ^另外:如果您的自动化测试需要人工观察,您可能需要更改测试的工作方式

+0

我不认为ive解释得很好。所以基本上我想让我的EXE公开一个API,以便我的任何C#项目都可以启动EXE并向窗口写入内容。 原因是我有一个SSH项目,发送大量的命令和读取响应,但不显示任何东西。这里有几位测试人员问我是否可以在控制台窗口或其他介质中显示这些响应。我尝试过使用Debug,但他们希望这是实时的,并希望在代码运行时看到输出。 – Festivejelly 2014-11-06 14:26:06

+0

为什么你需要额外的exe文件?如果你有权访问发送命令的代码,那么你可以插入一个方法,将命令输出到任何你喜欢的地方。 – Dawnkeeper 2014-11-06 14:31:58

+0

代码是C#单元测试,所以像Console.WriteLine这样的东西在这些测试运行时不会显示任何输出像MTM这样的工具。所以我想我可以创建一个exe启动id然后写输出。 – Festivejelly 2014-11-06 14:33:52