デフォルトで標準の「Windowsアプリケーション」として実行されるC#でプログラムを作成しています(プロジェクトプロパティ->出力タイプ)。
その通常の動作は、ショートカットなどから実行され、GUI が表示されることです。
ただし、特定のコマンド ライン引数を使用すると、コンソール アプリケーションとして実行され、GUI は表示されず、呼び出し元のシェルに終了コードが返されます。
「Windowsアプリケーション」としてコンパイルすると、実行時にフォークし、親スレッドが呼び出し元のプロセスにすぐに戻り、プログラムは独立した子スレッドで実行されます。これは、終了時に呼び出しプロセスに終了コードを返すことができないことを意味します。これは、プログラムが起動して fork されたときに既に発生しているためです。呼び出しプロセスが認識している限り、アプリケーションは常にすぐに完了し、0 を返します。
単純なコンソール プログラムの場合、答えは簡単です。「コンソール アプリケーション」としてコンパイルします。その場合、アプリケーションは起動時に fork せず、呼び出しプロセスはプログラムが終了して終了コードを返すまで待機します。残念なことに、このルートをたどると、Windows は常にコマンド ウィンドウ (コンソール、何と呼んでも... 大きな黒いもの!) を表示します。これは、プログラムが GUI モードで実行されている場合は厄介です。そのウィンドウを非表示にする API 呼び出しを行うことができると思いますが、それでも一瞬点滅します。
それで、起動時に「Windowsアプリケーション」がフォークするのを止める方法はありますか? または、「コンソール アプリケーション」がコンソール ウィンドウを表示するかどうかを制御する方法はありますか? 理想的には、これは C# コードで実行され、コマンド ライン引数に基づいて何が起こるかを選択できるようになります。
同様の質問をしている人々の投稿を見たことがありますが、適切な回答は見つかりませんでした (ほとんどの場合、回答者は分岐ビジネスを理解していません)。
このアプリケーションの Cocoa (Mac) バージョンを完成させました (ここで達成しようとしていることを正確に実行します)。Windows版で出来ないのはもったいないです。それは可能でなければなりません!:-)
どんなアイデアでも大歓迎です。