3

毎回 1 つのインスタンスしか実行できないアプリケーションがありますが、2 番目のインスタンスが起動された場合、最初のインスタンスも使用している共通のログファイルに記録する必要があります。

実行中のインスタンスの数を確認しており、最初は単純にイベント ロガーに記録することを計画していましたが、アプリケーションはユーザーまたはシステム コンテキストで実行されている可能性があり、イベント ログ ソースをユーザーとしてクエリしようとすると例外がスローされます。ユーザーがセキュリティ ログにアクセスできないため、アイデアは破棄されます。

そこで、同じアプリケーションの 2 つの別々のインスタンスをログ ファイルに書き込む最も安全な方法は、両方が確実にログ ファイルに書き込むことができる方法を見つけたかったのです。

回避できる場合は、既存の追加フレームワークを使用したくない

どんな助けでも感謝します。

4

5 に答える 5

3

Mutexは、ログ ファイルなどの共有リソースのプロセス間同期に使用できます。ここにサンプルがあります。

于 2009-08-19T15:21:23.743 に答える
1

システム イベント ログにはいつでも書き込むことができます。ロックなどは必要ありません。また、イベント ビューアは一部の人が認めるよりも堅牢です。

あなたのコメントに応えて、別のユーザーが SO のイベント ログへの書き込み権限について質問しました。それを実行する方法を説明するmsdnの記事にリンクされた回答。

ここでその質問を参照してください。

于 2009-08-19T15:36:51.020 に答える
0

必要に応じて、問題を回避できます...

これがWindowsアプリの場合は、最初のインスタンスにメッセージを送信してから終了することができます。メッセージを受信すると、元のインスタンスは問題なくログファイルに書き込むことができます。

于 2009-08-19T15:24:45.033 に答える
0

それをハックする1つの方法は、ログファイルをメモリマップすることです。このようにして、アプリケーションの両方のインスタンスがファイルの同じ仮想メモリイメージを共有します。次に、ファイル内にミューテックスを実装する方法がいくつかあります。

于 2009-08-19T15:45:21.830 に答える
0

syslogプロトコルを使用しないのはなぜですか? これにより、非常に標準に基づいた柔軟な方法でログを配信できます。プロトコル自体は非常に単純ですが、ネット上にはたくさんの例があります。アプリが企業での使用を目的としている場合、標準的な方法でログを記録できることは大きなプラスになる可能性があります。(そして、ファイルを維持する必要もありません - それはまさにそれを行う専門のソフトウェアの仕事になります)

于 2009-08-19T15:28:36.667 に答える