2013-07-02 3 views
5

私はWPFベースのインターフェイスを持つ小さなユーティリティを書いています。また、コマンドラインパラメータでプログラムを実行することで、ユーティリティが実行するタスクと同じタスクを自動化できるようにしたいと考えています。これらのタスクを両方とも1つのプログラムにまとめるのは悪い考えですか?私は、私のツールが別の共有ライブラリで実行する実際のロジックと機能を持っています。したがって、別々のものであれば、大量のコードを複製することはありません。GUIプログラムとコンソールアプリケーションを単一のEXEに結合するのは悪い考えですか?

私は、私は別のホストのプロジェクトから呼び出される機能クラスライブラリを作成します。この場合、

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     if (e.Args.Length > 1) 
     { 
      //Go do automated tasks 
     } 
     else 
     { 
      //open GUI 

      Window window = new Window(); 

      this.MainWindow = window; 

      window.Show(); 
     } 
    } 
+2

しばらくの間これをやってきたアプリケーションがあります...なぜそれは悪い考えですか?ハンマーが必要な場合は、ハンマーを使用してください。 – Tim

+0

1つの問題は、完全な動的リフレクションベースではなく、起動時にGUIサポートがバインドされている場合、コンソールアプリケーションの実行場所を制限していることです。あなたはそれを遅くしているかもしれません。おそらく.net/wpfでは大きな問題ではありませんが、他のコンテキストでは問題になる可能性があります。 – DrC

+5

Visual Studioで使用されているハックにいつでも従うことができます:) GUI用とコンソール用の2つの実行可能ファイルがあります。 .comが.exe(デフォルトのPATHEXT)より優先されるため、コンソール実行可能ファイルは.com拡張子(PEであるにもかかわらず)を取得します。したがって、cmd.exeから実行すると、コンソールのバージョンが表示され、.exeを実行するとGUIが表示されます。 –

答えて

1

ファイル私App.csにこのような何かをやって考えていました。 MyApp.WPFは、MyLibをdllとして参照します... MyApp.Consoleは、MyLibをdllとして参照します。

編集した機能を持つクラスライブラリが既にあります。同じアプリケーションにそれを保持することの本当のメリットは何ですか?

1

コマンドラインから自動化されたタスクやオプションを設定するには、間違いなくこれを行うことができますが、WPFアプリケーションにはコンソールウィンドウがないので、Console.WriteLine()などを使用することはできません。コンソール出力が必要ない場合は、大したことではないかもしれません。

コンソールウィンドウをWPFアプリケーションに接続するためのいくつかのひどいwin32ハックがあるかもしれませんが、私はそれをお勧めしません。実際のコンソールが必要な場合は、ライブラリのWPFとコンソールフロントエンドの両方をビルドする方法があります。

Options.csでも、C#でコマンドライン引数の処理を行うことをお勧めします。

編集:私はこのすべてについて間違っているかもしれない、コメントを見てください。 ALSO

:コンソールアプリケーション対Windowsアプリケーションについての関連情報:Difference between Windows and Console application

+0

コンソールウィンドウをWPFアプリケーションに簡単に追加できます。プロジェクトを作成したら、プロジェクトのプロパティに移動して、 "Start As"を "Console Application"に変更します。それでは、コンソールやメインウィンドウなどを手に入れます。 – Steve

+0

@スティーブ - 興味深い、私はあなたがそれをすることができなかった何らかの理由があると思ったが、それは私のためにうまくいくようだ。 – WildCrustacean

+0

私は深く掘り下げたことはありませんでしたが、特定のPCでアプリケーションを実行するとアプリケーションが失敗し、コンソールウィンドウを使用してトラブルシューティングを行いました。単にオプションを元に戻すだけでもう一度オフにしてください。 :) – Steve

2

これは、コンソールモードアプリではありませんので、あなたが実際にコンソールを作成していません。

引数を受け入れるGUIプログラムは、全く正常です。ボイラープレートの例はfile associationです。エクスプローラで.slnファイルをダブルクリックすると、Visual Studioが起動し、ソリューションがロードされます。ビットマップをダブルクリックするとMS-Paintが起動します。 Etcetera。クリックされたファイルのパスは、コマンドインタープリタで入力したのと同じように、コマンドライン引数を介してプログラムに渡されます。

ウィンドウを作成するかどうかは、あなた次第です。問題を報告する必要性を忘れないでください。

関連する問題