Windows サービスで動的にロードされた dll から NLog を使用して eventLog に書き込む方法。
NLog 2.0.1 を使用して、動的に dll をロードする Windows サービスがあります。その dll 内から、NLog を使用して (しようとして)、EventLog にログを記録します。eventLog はカスタムで、サービス インストーラーによって作成されます。
エラー:
Service cannot be started. System.Reflection.TargetInvocationException:
Exception has been thrown by the target of an invocation.
---> System.TypeInitializationException: The type initializer for 'MyService.Worker' threw an exception.
---> NLog.NLogConfigurationException: Error during initialization of EventLog Target[eventLog_wrapped]
---> System.IO.IOException: The network path was not found.
at Microsoft.Win32.RegistryKey.Win32ErrorStatic(Int32 errorCode, String str)
at Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey, String machineName, RegistryView view)
at System.Diagnostics.EventLog.GetEventLogRegKey(String machine, Boolean writable)
at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly, Boolean wantToCreate)
at System.Diagnostics.EventLog._InternalLogNameFromSourceName(String source, String machineName)
at System.Diagnostics.EventLog.LogNameFromSourceName(String source, String machineName)
at NLog.Targets.EventLogTarg...
ロギングをテストするために winForm アプリを作成しましたが、ロギングは期待どおりに機能しますが、自分のサービスで同じことをしようとすると機能しません。
「Local System」および「Network Service」でサービスを実行しようとしましたが、同じエラーが発生します。「ネットワークパス....」に関しては、アクセスされているネットワークパスがないため、これが何を伝えようとしているのかわかりません。
私のNLog構成/ターゲットは次のとおりです。
<variable name="appName" value="MyApp" />
<variable name="source" value="MySource" />
<target xsi:type="EventLog"
name="log"
log="My Service"
source="${source}"
machineName="."
layout="${callsite}${newline} ${message}${newline}${exception:format=ToString}"
/>
これを機能させる方法についてのアイデアをいただければ幸いです。