1

Windows イベント ログにイベントを書き込む際に問題が発生しています。投稿を確認しましたが、正しく実行していると思いますが、イベント ビューアーに次のエラーが表示されます。

メッセージ リソースは存在しますが、文字列/メッセージ テーブルにメッセージが見つかりません

私が欠けているものについて何か考えがある人はいますか?

WIX インストーラーでイベント ソースを作成しています。

<Fragment>
    <PropertyRef Id="NETFRAMEWORK35"/>
    <PropertyRef Id="NETFRAMEWORK20"/>
    <PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR"/>
    <PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR64" />

    <Component Id='EventSource'
               Directory='INSTALLDIR'
               Guid='F382AAC5-F7C5-46A4-95CF-EA7724DXXXXX' >
        <Condition>ALLUSERS</Condition>
        <?if $(var.Platform) = x64 ?>
            <util:EventSource Log='Application'
                    Name='MySource'
                    EventMessageFile='[NETFRAMEWORK20INSTALLROOTDIR64]EventLogMessages.dll'
                    KeyPath='yes' />
        <?else ?>
            <util:EventSource Log='Application'
                    Name='MySource'
                    EventMessageFile='[NETFRAMEWORK20INSTALLROOTDIR]EventLogMessages.dll'
                    KeyPath='yes' />
        <?endif ?>
    </Component>
</Fragment>

イベント ログに書き込む C# コードは次のとおりです。

public class Log
{
    private const string EventSource = "MySource";
    private const string EventLog = "Application";
    private static EventLog _logger = null;

    private static void InitLogger()
    {
        if (!System.Diagnostics.EventLog.SourceExists(EventSource))
        {
            System.Diagnostics.EventLog.CreateEventSource(EventSource, EventLog);
        }
        _logger = new EventLog() { Source = EventSource, Log = EventLog };
    }

    public static void Write(EventLogEntryType entryType, string format, params object[] args)
    {
        string entry = _Format(format, args);

        try
        {
            if (_logger == null)
                InitLogger();
            _logger.WriteEntry(entry, entryType, 1);
        }
        catch (Exception ex)
        {
            Tracer.Misc.Error("Could not write to event log: {0}", entry);
        }

    }

    private static string _Format(string format, object[] args)
    {
        if ((args == null) || (args.Length == 0))
            return format;

        try
        {
            return String.Format(format, args);
        }
        catch (Exception e)
        {
            return format + " [Format Exception:" + e.Message + "]";
        }
    }
}
4

2 に答える 2

3

私は自分の問題を理解しました。私が持っているコードは大丈夫です。問題は、使用していた EventSource の名前にあります。イベント ソースにスペースとダッシュが含まれていました。それらを削除すると、機能しました。

「My Event-Source」から「MyEventSource」に移行する IE

于 2013-02-22T14:48:40.817 に答える