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を見つけることができたが、もはや古いものと関連していないように見えます。これを達成する他の方法がありますか?
いいえ、どちらのタイプでも2つのexeをビルドする必要があります。 – leppie
@leppieコメントありがとうございます。コマンドラインをサポートするexeファイルを作成するための標準的なプラクティスですか?私はスペースの制約のために2つのアプリケーションが1つしかないことを好むだろうから頼みます。 – Bassie
2つの小さな(最大で4KB)exeと大きなdllが必要です。 – leppie