将字符串列表作为参数传递给控制台应用

时间:2012-04-04 09:44:59

标签: c# windows parameters arguments console-application

我需要将一个字符串列表作为参数传递给控制台应用程序(使用C#开发)。 控制台应用程序以System.Diagnostics.Process.Start启动,如:

string fname = "testDoc";
List<string> myList;  //initialized elsewhere

Process console = Process.Start("Client.exe", "-filename:"+fname+ " -list:"+myList);

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

运行

Process console = Process.Start("Client.exe", "-filename:" + fname + " -list:" + myList)

将执行myList.ToString()并将转换为:

Client.exe -filename:testDoc -list:System.Collections.Generic.List`1[System.String]

这不是你想要达到的目标。尝试

Process console = Process.Start("Client.exe", "-filename:" + fname + " -list:" + String.Join(",", myList)) 

或类似的东西。

<强>更新

当然,您可能需要考虑一些将数据传递到该流程的文明方法。常见的方法包括:

  • 数据库
  • 文件系统(文件)
  • WCF

<强>更新

鉴于评论中提供的上下文,我选择在服务器上运行一个完全独立的Windows服务(不停止,不调用),并使用数据库进行同步:

  • 包含表格Tasks的数据库input dataoutput data以及您可能想要的任何其他内容(例如某些日期或用户ID)
  • 将要显示的数据作为待处理数据插入到该表中的网页
  • Windows服务重复(每隔x秒)查询表中未处理的任务并执行任务(如果有的话);结果会保存在output data
  • 对用户请求网页查询给定任务并显示其状态,显示输出数据(如果有)

随着用户流量的增长,这种功能更强大,扩展性也更好。理想情况下,服务本身会为单独的任务生成工作线程,以利用多个内核。有了这样的架构,有很多方法可以优化性能并监控任务。

答案 1 :(得分:0)

也许您通过

创建列表内容
String.Join(";", myList);

并在您的应用程序中使用

重建它
String.Split(";", receivedParameter);

另一种可能性是将列表内容写入文件并仅提供控制台应用程序必须读入的文件名作为参数。

答案 2 :(得分:0)

string listValues = String.Join(",", myList.Select(s => String.Format("\"{0}\"", s)).ToArray());
Process console = Process.Start("Client.exe", String.Format("-filename:\"{0}\" -list:{1}", fname, listValues));