3

私はこの投稿をフォローしてコード(以下にコピー)を実行しようとしていますが、少し異なる問題が発生しています。サーバーにリモート接続して、イベントビューアプログラムを介してイベントログを表示することはできますが、コード内のイベントを反復処理することはできません。「マシンでログEventLogNameを開くことができません。Windowsはエラーコードを提供していません。」というInvalidOperationExceptionが発生します。「アクセスが拒否されました」というタイプSystem.ComponentModel.Win32Exceptionの内部例外もあります。

private static bool GetEventLogData(DateTime start)
{
    var log = new EventLog("EventLogName", "SERVER.domain.net");
    bool errorFound = false;
    foreach (EventLogEntry entry in log.Entries)
    {
        if ((entry.EntryType == EventLogEntryType.Error) && 
            (entry.TimeGenerated >= start))
        {
            Console.WriteLine("Error in Event Log:\n" + entry.Message + "\n");
            errorFound = true;
        }
    }
    return errorFound;
}

何か案は?

編集:

例外データは以下のとおりです。会社情報のためサーバー名を投稿できません。イベントログを読み込もうとするとエラーが発生します。アカウントにリモート接続し、イベントビューアを使用してログを読み取ることができるため、ログを読み取ることができると確信しています。

System.InvalidOperationException was unhandled
  Message=Cannot open log EventLogName on machine SERVER.domain.net. Windows has not provided an error code.
  Source=System
  StackTrace:
       at System.Diagnostics.EventLogInternal.OpenForRead(String currentMachineName)
       at System.Diagnostics.EventLogInternal.GetEntryAtNoThrow(Int32 index)
       at System.Diagnostics.EventLogEntryCollection.EntriesEnumerator.MoveNext()
       at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
       at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
       at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
       at System.Collections.Generic.List`1.AddRange(IEnumerable`1 collection)
       at MyApp.Program.GetEventLogData(String machineName, DateTime start) in c:\users\me\documents\visual studio 2010\Projects\MyApp\MyApp\Program.cs:line 45
       at MyApp.Program.Main(String[] args) in c:\users\me\documents\visual studio 2010\Projects\MyApp\MyApp\Program.cs:line 28
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.ComponentModel.Win32Exception
       Message=Access is denied
       ErrorCode=-2147467259
       NativeErrorCode=5
       InnerException: 
4

1 に答える 1

1

これは、ポリシーの許可の問題である可能性があります。TechNetのイベントログWindows2003およびWindows2008ブログエントリを読むには、非管理者に権限を与えるを参照してください。これを実行すると、コードを機能させることができました。Windows 2008 Server以降の場合は、ユーザーをイベントログリーダーのローカルセキュリティグループに追加するだけです。それを行うまで、同じエラーが発生していました。

于 2012-07-19T18:15:23.007 に答える