我需要将一个字符串列表作为参数传递给控制台应用程序(使用C#开发)。 控制台应用程序以System.Diagnostics.Process.Start启动,如:
string fname = "testDoc";
List<string> myList; //initialized elsewhere
Process console = Process.Start("Client.exe", "-filename:"+fname+ " -list:"+myList);
我怎样才能做到这一点?
答案 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))
或类似的东西。
<强>更新强>
当然,您可能需要考虑一些将数据传递到该流程的文明方法。常见的方法包括:
<强>更新强>
鉴于评论中提供的上下文,我选择在服务器上运行一个完全独立的Windows服务(不停止,不调用),并使用数据库进行同步:
Tasks
的数据库input data
,output data
以及您可能想要的任何其他内容(例如某些日期或用户ID)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));