2016-06-30 12 views
0

UIを表示せずにコマンドを実行できるように、作成したデスクトップアプリケーションのコマンドラインサポートを追加しようとしています。これは私のMain方法がどのように見えるか、およそ次のとおりです。実行時のアプリケーション出力タイプを変更する方法

[STAThread] 
private static void Main(string[] args) 
{ 
    // Run the desktop application 
    if (args.Length == 0) 
    { 
     AppDomain.CurrentDomain.ProcessExit += OnProcessExit; 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     var mainForm = new Form1(); 
     Application.Run(mainForm); 
     mainForm.BringToFront(); 
    } 
    // Restart the session and log in console 
    else if(args[0] == "restartsession") 
    { 
     Console.WriteLine("Restarting session..."); 
    } 
    // argument not recognised (log to console) 
    else 
    { 
     Console.WriteLine($"Argument \"{args[0]}\" not recognised"); 
    } 
} 

これは離れてConsole.WriteLine()を呼び出すときに、コンソールウィンドウが表示されていないという事実から、うまく動作しているように見えます。

これは私のプロジェクトの出力タイプがWindows Applicationに設定されているためです(プロパティでこれを設定しています)。 Console Applicationに変更すると、コンソールウィンドウが自分のログと共に表示されますが、「UI」デスクトップバージョンを開くと表示されます(つまり、引数なしでアプリを実行している)。

Main()に渡された引数に応じて出力タイプを変更する方法はありますか?たとえば、おそらくこのような何か:

private static void Main(string[] args) 
{ 
    if (args.Length == 0) 
    { 
     Application.OutputType = WindowsApplication 
    } 
    else if(args[0] == "restartsession") 
    { 
     Application.OutputType = ConsoleApplication 
    } 
} 

私はthis linkを見つけることができたが、もはや古いものと関連していないように見えます。これを達成する他の方法がありますか?

+1

いいえ、どちらのタイプでも2つのexeをビルドする必要があります。 – leppie

+0

@leppieコメントありがとうございます。コマンドラインをサポートするexeファイルを作成するための標準的なプラクティスですか?私はスペースの制約のために2つのアプリケーションが1つしかないことを好むだろうから頼みます。 – Bassie

+1

2つの小さな(最大で4KB)exeと大きなdllが必要です。 – leppie

答えて

0

Leppieがで正しい答えを持っていますコメント。このようなシナリオでは、実際のアプリケーションプロジェクトはと非常に小さいとなるはずです。そのアプリケーションタイプに固有のものだけを含める必要があります。

ビジネスロジック、アプリケーション共有初期化ロジックなどはすべて、両方で消費される別のプロジェクトに移動する必要があります。

0

Leppieがコメントで示唆したように、これは不可能で、デスクトップ用とコマンドライン用の2つのアプリケーションを別々に構築する必要があります。

このための可能な解決策が dllRestartSession機能をcompartmentaliseし、同じDLL(デスクトップ用とコンソールに1つ)を呼び出す2つの小さなEXEファイルを持っているだろう

関連する問題