1

try catch を使用せずにイベント ログの書き込みアクセス許可を検証するにはどうすればよいですか? 次の質問を読みました: Checking Event Log writing Permissions without writing a entryですが、回答ではEventLogPermissionAttribute. 私が知る限り、これを使用して許可を検証するExceptionことはできません。要求された許可がない場合はスローされます。

私のコードは次のようになります。

public void WriteMessage(string message)
{
    try {
        var trace = new TraceSource("MySource");
        trace.TraceEvent(TraceEventType.Information, 1000, message);
    } catch() {
        var log = LogManager.GetLogger<MyClass>();
        log.Info(message);
    }
} 

しかし、私はこのようなものが欲しいです:

public void WriteMessage(string message)
{
    if(EventLogPermission("MySource"))
    {
        var trace = new TraceSource("MySource");
        trace.TraceEvent(TraceEventType.Information, 1000, message);
    } else {
        var log = LogManager.GetLogger<MyClass>();
        log.Info(message);
    }
}

もちろん、最終的には大した違いはありませんが、ロジックに try catch を使用すると、単に汚れているように感じます。

4

2 に答える 2

1
    [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
    public static extern int RegOpenKeyEx(
      UIntPtr hKey,
      string subKey,
      int ulOptions,
      int samDesired,
      out UIntPtr hkResult);

    public static UIntPtr HKEY_LOCAL_MACHINE = new UIntPtr(0x80000002u);
    public static int KEY_WRITE = 0x20006;

    /// <summary>
    /// This method checks write permissions to HKLM\SYSTEM\CurrentControlSet\Services\EventLog which is necessary to create event log source
    /// </summary>
    /// <returns>True if permission to create Event log source is granted, false if not</returns>
    public bool HasCurrentUserEventLogWritePermissions()
    {
        UIntPtr x;
        long err = RegOpenKeyEx(HKEY_LOCAL_MACHINE, @"SYSTEM\CurrentControlSet\Services\EventLog", 0, KEY_WRITE, out x);
        return err == 0;
    }
于 2014-07-23T19:47:48.713 に答える
0

わかった。私はあきらめます。これは、失敗した試みを伝えるためだけです。私は少し検索し、もう少し熟考しましたが、答えは残念です。これは好きなようにはできません。

EventLogPermission例外を取得せずに(一般的にセキュリティ権限)を確認する方法を見つけようとしました:FAILED。

例外を取得せずに RegKey を開こうとしました: FAILED。

実際、有用なアンマネージ APIEventLogPermissionが存在しますが、アプリケーションに欠けている場合、誰がそれを提供するのSecurityUnmngdCodeAccessでしょうか?

于 2014-07-24T11:53:12.247 に答える