学習目的のために、私はC#とwinformsでクラス生成アプリケーションを開発しています。私はスクリプトでアプリケーションを使用できるようにするコマンドラインモードを含めることは良いかもしれないと思う。アプリケーションにコマンドラインモードを含めるべきですか?
アプリケーションにコマンドラインモードを組み込むことをお勧めしますか? 2つの異なるプログラムを用意する方がいいでしょう.1つはコマンドライン用のGUIです。
学習目的のために、私はC#とwinformsでクラス生成アプリケーションを開発しています。私はスクリプトでアプリケーションを使用できるようにするコマンドラインモードを含めることは良いかもしれないと思う。アプリケーションにコマンドラインモードを含めるべきですか?
アプリケーションにコマンドラインモードを組み込むことをお勧めしますか? 2つの異なるプログラムを用意する方がいいでしょう.1つはコマンドライン用のGUIです。
実際にC#アプリケーションをコンソールにするとGUIが問題になります。コンソールアプリケーション(/t:exe)が起動し、コマンドプロンプトが終了するのを待ちます。 GUIアプリケーション(/t:winexe)コマンドシェルはそれらを起動し、すぐに戻ります。 'コンソール'アプリケーションからフォームを作成して実行することはできますが、常にバックグラウンドコンソールが表示されます。一方、 'Forms'アプリケーションはstdin、stdout、stderrを接続せず、コマンドラインツールとして動作し、コマンド引数を処理することができますが、標準入力/出力はフックアップ)。
GUI駆動型アプリケーションとスクリプト/パイプ対応バッチ処理の両方から機能を公開したい場合は、機能をクラスライブラリにコンパイルし、次に2つの別々のアプリケーション(1つのGUI 1つのコンソール)を構築することですそのライブラリを活用してください。
はい。プログラムがスクリプト環境で役立つと思う場合は、コマンドラインモード(UIなし)を含めて、スクリプトで使用できるようにしてください。
別個のアプリケーションである必要はありませんが、それは可能です。あなたがそれをしたいかどうかは、あなた次第です。私はあなたが2つのアプリケーションを持っていれば、同じロジックアセンブリを共有しますが、インターフェイス(1つのGUIともう1つのコマンドライン)はちょうど異なると思います。
コンソールアプリケーションとして正しく動作するアプリケーションをWindowsプラットフォーム上に作成することは、2つの異なるタイプのアプリケーションとみなされるため、Windowsカーネルアーキテクチャの問題です。コンパイラまたはリンカのオプション)。あなたは手動でIOをリダイレクトして、win32関数AllocConsole()と友人によってコンソールを開くことができますが、これにはいくつかの問題もあります。詳細については、This Old New Thing postを参照してください。
レイモンドはこれについて既に投稿していますが –
スクリプトでユーティリティ/プログラムを実行する場合は、COMとして公開できます。
Windows用の多くのスクリプト言語では、COMオブジェクトを直接使用することができませんでした。
私はC#のプログラマーないんだけど、私はC++でプログラミングするとき、私はそれが最も有用見つける:
1)共有Cのライブラリと同様にコアアプリケーションを実行するためのC++ APIの両方を作成します。機能性。
2.シェルインタープリタでアクセス可能な1つ以上のコマンドラインバイナリを作成します。
3.)(バイナリを呼び出すのではなく)ライブラリで実装された一般的なエンドユーザー用のGUIアプリケーションを作成します。
これは、アプリケーションのロジックをアプリケーションとインタフェースから分離し、サードパーティの開発者が同じアプリケーション機能の代替インタフェースを作成できるようにします。また、スクリプトを作成しやすくすると同時に、きれいで光沢のあるGUIを望む典型的なエンドユーザーを対象にしています。
私は、コア機能を持つライブラリの作成について、michaelsafyanに同意します。
私が追加したいのは、powershellコマンドレットもチェックアウトする必要があるということです。
多くのコマンドラインアクティビティがpowershellに移行され、テーブルに多くのものがもたらされます。
私は非常に頻繁にAPIのようなユーティリティを作成します。簡単なコマンドラインユーティリティから使用する必要がある場合は簡単です。APIを呼び出すだけです。コマンドラインが複雑すぎる場合は、おそらく、Winformsアプリケーションが必要です。これはAPIを呼び出すこともできます。私がPowerShellやMSBUILDタスクから使いたいのであれば、まだ簡単です。単にAPIを呼び出すだけです。
@Remus Rusanuに同意します。
コア機能のクラスライブラリを作成し、そのためのGUIアプリケーション(ラッパー)を作成する必要があります。
、それの一つの他の利点は、PowerShellを使用して.NETのDLLの機能にアクセスできるよう、あなたも、コマンドラインアプリケーションを作成する必要はないかもしれません..です
あなたはhere
の上に一例を見つけることができます別の素晴らしいアイデアは、スクリプト言語を埋め込むことです。あなたのプログラムはスクリプトで制御することができ、スクリプト言語からすべてのロジック、分岐などを「無料」で取得できます。
埋め込み可能なものはたくさんあります。ルアは、その目的のために最も人気があり、意図されており、優れた選択肢です。
しかし、一般的なアプリケーションでは、Pythonを埋め込むことに力を注いでいます。 Pythonは非常に人気があります。あなたは、あなたのアプリのためのスクリプトを書こうと努力してくれる大きなグループの人々を抱えています。
ユーザビリティと快適性を高めるには、アプリケーションにコマンドラインインターフェイス( )を含める必要があります。 例えば、CLIコマンドを呼び出すほうが速く、GUIを起動していくつかのメニューレイヤーをナビゲートして同じ機能を実現することができます。 アプリケーションのユーザーにCLIモードを使用すると便利であるかどうかを尋ねる場合があります。
Windows上でCLI & GUIとの結婚についていくつかの単語: AのWindowsアプリケーションは、GUIアプリケーションやコンソールアプリケーションのどちらかですが、ない両方。これはOSの問題で、おそらくそれについて何もできないことがあります。 Windowsのコンソールサブシステムは恐ろしいですが、PowerShellはそれを変更しませんでした。 Windows上の
あなたの実装オプションは以下のとおりです。
は、2つのファイルを提供します。 コマンドラインで実行可能なプロービングが行われるため、comファイルはexeより前に実行されます。
その後すぐにGUIを開始した後、あなたがそれを閉じるためにFreeConsole()を呼ぶかもしれない、上のコンソールモードを使用してGUIアプリケーションをコンパイルします。 少し迷惑ですが、うまくいきます。悪い:今あなたはちらつきコンソールウィンドウを持っています。プロ:まだ1つのファイル。
win32-apiのもの(AllocConsole/AttachConsole)を使用してwinexeアプリケーションでコンソール出力ウィンドウを作成することもできますが、正しいサブシステムが指定されていないために問題が残ります。 –
@ジャスパー:確かに、あなたはインデックス0,1と2でFCBを追うこともできると思うが、私はそれを離れて、現在のアップストリームと戦うのではなく、流れに行くよ) –
私は決してGUIとコマンドラインの両方を走らせるアプリを書く必要があったので、実現するのはそれほど問題だったとは決して考えなかった。非常に有益な応答。 –