2012-04-04 125 views
1

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

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

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

我怎样才能做到这一点?

+0

只是出于好奇。您的列表中有多少数据(字节长度)? – Steve 2012-04-04 10:38:53

+0

该列表包含以下格式的文档标题:“GUID_fileName.pdf”。关于字节长度,我不知道,我应该看看这个,因为标题会彼此不同。 – Francesco 2012-04-04 12:08:00

+1

我问过,因为命令行参数长度有一个确定的限制 – Steve 2012-04-04 12:20:35

回答

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)) 

或类似的东西。

UPDATE

当然,你可能要考虑将数据传递给该过程的一些更文明的方法。常用的方法包括:

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

UPDATE

给出的评论所提供的背景下,我会选择一个完全独立的服务器上运行的Windows服务(不停止,未调用)与用于同步的数据库:

  • 数据库表Tasks的列input dataoutput data和任何其他你可能想(像某些日期或用户ID)
  • 网页中插入行该表为数据待处理出现
  • 窗口重复服务(每x秒)查询表中未处理的任务并执行任务(如果有的话);查询结果保存在output data
  • 对用户请求的网页查询,对于一个给定的任务,并显示它的状态,显示如果它的输出数据有

这是更为强大和不断增长的用户流量更好的扩展。理想情况下,服务本身可以为独立任务生成工作线程以利用多个内核。有了这样的体系结构,有很多方法可以优化性能并监视任务。

+0

+1伟大的提示! - 控制台应用程序将从Web应用程序启动。单独的进程将接收文档名称,并将检索它们调用Web服务并将它们合并到唯一文件中。从Web应用程序中,PrintPage.aspx将轮询生成的文件将被删除的文件夹。考虑到这种情况(许多用户可以决定在同一时间打印)您建议采用哪种方法? – Francesco 2012-04-04 12:14:11

+0

更新回答 – 2012-04-04 12:41:10

+0

WCF可以用来摆脱DB;网页通过WCF调用服务,服务执行工作并以某种方式(如文件)输出结果,以便网页可以访问它。 WCF将使你能够解耦这两个,但所有的帽子都需要更多的工作才能做对。 – 2012-04-04 14:13:09

0

也许你通过

String.Join(";", myList); 

,并在应用程序中创建列表的内容你

String.Split(";", receivedParameter); 

重建了另一种可能性是写列表中的内容到一个文件中,并提供为参数仅控制台应用程序必须读入的文件名。

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)); 
相关问题