2009-08-19 14 views
3

私は毎回1つのインスタンスしか実行できないアプリケーションを持っていますが、2番目のインスタンスが起動された場合は、最初のインスタンスも使用できる共通のログファイルにログオンする必要があります。同じアプリケーションの2つのインスタンスから安全にログファイルに書き込む方法はありますか?

私はいくつのインスタンスが実行されているかチェックしていますが、最初はイベントロガーにログを記録するだけですが、アプリケーションはユーザーコンテキストまたはシステムコンテキストで実行されていて、イベントログソースのクエリを試みると例外がスローされます。セキュリティログがユーザーにとってアクセス不能なため、アイデアが廃棄されるようにします。

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

は、私はすべてのヘルプは感謝回避

場合は、既存の追加のフレームワークを使用しないでしょう。

答えて

3

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

0

ご希望の場合は、これは、Windowsのアプリケーションであれば、あなたが最初のインスタンスにメッセージを送信してからちょうど終了することができます

...問題をかわすことができます。メッセージを受信すると、元のインスタンスは問題なくログファイルに書き込むことができます。

0

syslogプロトコルを使用しないのはなぜですか?これにより、標準ベースの柔軟な方法でログを配信できます。プロトコル自体は非常に単純ですが、ネット上にはたくさんの例があります。 here。あなたのアプリがエンタープライズ向けのものであれば、標準的なロギング方法があれば大きなプラスになる可能性があります。 (そして、ファイルを維持する必要はありません - それはそれを行う特殊なソフトウェアの仕事になります)

1

いつでもシステムイベントログに書き込むことができます。ロックも何も必要なく、イベントビューアは信用を与えるものよりも堅牢です。

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

質問はhereをご覧ください。

+0

私はこれを試しましたが、アプリケーションがユーザーとして実行されているときに問題に遭遇しました。これを避ける方法はありますか?前述のように、システムまたはユーザーアカウントで他のインスタンスが実行されている可能性があります。最初に起動される保証はありません。 – Trotts

+0

セキュリティ上の問題に対応しているSOの質問にリンクするように更新されました。 –

0

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

関連する問題