来自命令行的C#程序参数?

时间:2010-10-05 04:45:08

标签: c# stdin cmd

我正在尝试启动运行的C#程序,然后在cmd.exe开始运行后从cmd.exe发出命令。例如,假设我从命令行启动了我的.exe(C://FILEPATH/my_program.exe)。然后我想让该程序继续运行,然后让我能够将命令传递给它能够处理的命令。在我的理想世界中,这将是“C://FILEPATH/my_program.exe run_my_command()”,它将执行run_my_command函数,或“C://FILEPATH/my_program.exe k”,这将做出回应我预先编程的字符。我知道,正如我输入的那样,会启动my_program.exe的新副本。当我传递类似的内容时,我只想让一个人跑。

有谁知道怎么做?非常感谢示例代码。谢谢!

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是让你的第二个“my_program.exe”实例查找已经运行的现有实例,将消息“传递”给它,然后立即退出。

实现它的常用方法是通过命名管道(.NET 3.5+中的System.IO.Pipes)。程序启动时,请侦听具有给定名称的命名管道。如果还有其他内容正在侦听该管道,请将消息发送给它并退出。

答案 1 :(得分:1)

您正在描述典型的服务和命令工具。服务(恶魔)在后台运行并执行命令。命令工具获取用户命令并将它们传递给服务。见Windows Service Applications。拥有服务而不是启动多个进程会处理您的方法遇到的一些问题,例如进程之间的安全隔离(例如,一个用户启动命令,另一个用户启动另一个命令并在第一个用户的上下文中执行)和进程生存期问题(用户启动命令然后关闭其会话)。

命令工具将通过经典IPC(本地RPC,管道,共享内存等)与进程通信。