私の質問は、Windowsイベントログへの書き込み許可に関するものです。これに関するいくつかの投稿を見て、問題を解決する方法を見つけましたが、現在のシナリオではこれらはどれも受け入れられません。
.NET 4.0ではC#を使用しています。 EventLogクラスを使用します: EventLog class
つまり、イベントログに書き込む必要がある権限に到達するために、認証されたユーザーとパスワードで偽装または認証する方法があるかどうかを確認する必要があります。サーバーは常にWindows Serverファミリーに属しますが、バージョンは異なる場合があります。
私のアプリケーションは、次のアカウントのいずれかで実行されているWindowsサービスです。
ここに私が持っているいくつかの他の基準があります:
私の質問は:これは可能ですか?
コードでユーザーを偽装して、必要なものを実現できますか?私は、Webサービスに接続するとき、SMTPサーバーにログオンするとき、そしてもちろんデータベースなどに詰まるときにそれを行います。
私はこのクラスにつまずいた: EventLogPermission Class
しかし、クラスの使用方法について良いコンセプトを得ることができないようです。
私の問題をうまく表現できたことを願っています。私の基準のため、これを別の投稿の複製とは考えません。
答えは「いいえ」であることが示されました。
私が要求した方法でこれを解決する良い方法はないことを理解しています。手動での作業が必要です。
したがって、このシナリオで選択するソリューションは、管理者としてサービスを実行できない、または手動でレジストリを編集できないお客様は、イベントログへのログ記録に関する機能を使用できないということです。そして、設定からロギングを有効または無効にすることを可能にします。
管理者ユーザーとレジストリ編集は私にとって既知の方法ですが、述べたように、私は避けようとしていました。しかし、それは、今回の私の基準では不可能なようです。
デフォルトでは、認証されたユーザーはアプリケーションイベントログに書き込むことができます。ただし、管理者のみが新しいイベントソースを作成できます。サービスのインストール時にすべてのイベントソースがわかっている場合は、それらのソースを事前に登録することをお勧めします。そうすれば、すべてのセットアップが完了します。登録は EventLog.CreateEventSource への単純な呼び出しです。
イベントソースの柔軟性を高める必要がある場合は、権限をカスタマイズできます。これらのデフォルトは、レジストリキーを調整することでカスタマイズできます。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
これに記載されているプロセス KB記事 。 Server 2008以降で利用可能なOSの一部であるwevtutil
ツールを使用すると、regeditを使用するよりも少し簡単になります。