2012-04-04 19 views
1

(C#で開発された)コンソールアプリケーションにパラメータとして文字列のリストを渡す必要があります。コンソールアプリケーションへのパラメータとして文字列リストを渡す

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

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

がどのように私はこれを達成することができます コンソールアプリケーションは次のようにSystem.Diagnostics.Process.Startで開始されましたか?

+0

ちょうど好奇心から離れる。あなたのリストにはどのくらいのデータ(バイト長)がありますか? – Steve

+0

リストには、 "GUID_fileName.pdf"という形式の文書タイトルが含まれています。バイトの長さについては分かりませんが、これはタイトルが異なるためです。 – Francesco

+1

コマンドライン引数の長さに一定の制限があるため、私は尋ねました。 – Steve

答えて

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

を、私はAを選ぶと思います同期に使用されるデータベースを使用して、サーバー上で稼働しているWindowsサービス(ノンストップ、起動されていない)を完全に分離します。

データ・ツー・処理することが
  • ウィンドウを表示されているテーブルに行を挿入する(一部の日付またはユーザーIDなど)
    • input dataとテーブルTasksとデータベース、output dataし、必要かもしれない他のどの
    • Webページ(x秒ごとに)未処理のタスクをテーブルに照会し、タスクがあれば実行します。結果は、与えられたタスクのためにoutput data列ユーザ要求Webページのクエリに
    • に保存され、それはそれはだ場合、出力データを示し、状況だが表示されますが

    これは、はるかに堅牢で、成長しているユーザトラフィックをはるかに優れたスケール。サービス自体は、複数のコアを利用するために、ワーカースレッドを独立したタスクとして生成するのが理想的です。このようなアーキテクチャを使用すると、パフォーマンスを最適化してタスクを監視する方法がたくさんあります。

  • +0

    +1大きなヒント! - コンソールアプリケーションは、Webアプリケーションから起動されます。別のプロセスはドキュメント名を受け取り、それらを取得してWebサービスを呼び出し、それらを一意のファイルにマージします。 Webアプリケーションから、PrintPage.aspxは、生成されたファイルがドロップされるフォルダをポーリングします。このシナリオ(多くのユーザーが同じ時間に印刷を決めることができる)を考えて、どの方法をお勧めしますか? – Francesco

    +0

    が –

    +0

    に更新されましたWCFを使用してDBを取り除くことができました。 WebページがWCF経由でサービスを呼び出すと、サービスは作業を実行し、結果をWebページにアクセスできるように(ファイルのような)何らかの方法で出力します。 WCFを使用すると、これらの2つを切り離すことができますが、すべての帽子が正しい作業を行うためには多くの労力がかかります。 –

    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)); 
    
    関連する問題