winform、コンソール、WPF など、ほとんどのプロジェクトで作業しているときに、必要に応じて、実行時にメッセージ ボックスなどを使用して、より簡単に確認したい情報を出力できます。
MessageBox.Show(whateveriwannashow);
ただし、私は現在、あらゆる種類の GUI の存在を許可しない Windows サービスに取り組んでいます。情報を表示するには、どの方向に進む必要がありますか? VS2010 には、この種の機能が組み込まれていますか?
System.Diagnostics.Traceは、あなたの新しい親友です。トレースは、Visual Studio の出力ウィンドウに直接出力され、ロガーに送信したり、SysInternals DebugView などの無料のサードパーティ ツールを使用して表示したりできます。
デバッグ作業では、ログ記録よりも優れています。理由は次のとおりです。
(半)永続的な情報については、Spencer に完全に同意します。しかし、デバッグやトレースのために簡単なランタイム情報が必要な場合は、コマンドライン ウィンドウを「ハイジャック」して書き込むことができます。
protected override OnStart(string[] args)
{
int processId;
IntPtr ptr = GetForegroundWindow();
GetWindowThreadProcessId(ptr, out processId);
var process = Process.GetProcessById(processId);
if (String.CompareOrdinal(process.ProcessName, "cmd") == 0)
{
// Hijack an existing foreground cmd window.
AttachConsole(process.Id);
}
else
{
// Or create a new one
AllocConsole();
}
}
protected override OnStop()
{
FreeConsole();
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool FreeConsole();
[DllImport("kernel32", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
次に、出力にコンソールを使用できます。理想的には、log4netなどのサードパーティのログ システムを使用できます。私のシナリオでは、セットアップは次のようになりました。
//Enable log4net logging into the console
ConsoleAppender appender = new ConsoleAppender {Layout = new SimpleLayout()};
BasicConfigurator.Configure(appender);
しかし、その部分はlog4net固有です。Console.Write()
セットアップははるかに困難ですが、でも使用できるはずです。
これについて私が気に入っているのは、サービスのコマンドライン/構成パラメーターに「バインド」できることです。サードパーティのロガーは、ログをデフォルトの場所からコンソールに切り替えるだけです。コードでさらにチェックを行う必要はありません。また、これはどこでも実行できます-開発マシン、リモートサーバー...
とにかく、最初に言ったように、リアルタイムの情報が本当に必要ないのであれば、Spencer のアドバイスに従うと思います。
ログを使用する必要があります。
テキストログが物理的に保存される方法を抽象化するサードパーティのライブラリを使用してログを記録するのはどうですか? app.config
次に、任意の種類のログ出力を使用するようにサービスを構成できます。
コードを変更する必要はありません。
たとえば、 Enterprise Libraryまたはlog4netを使用できます。