2012-04-04 84 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)); 
相關問題