Конференция "WinAPI" » Своё сообщение в EventLog Windows
 
  • neversleep (09.11.10 17:04) [0]
    Возникла проблема при добавлении записи в журнал событий:

    ресурс сообщения существует, но сообщение не найдено в таблице строк и таблице сообщений
    -
    Не пойму почему ОС (Win7) не находит нужный ресурс, помогите разобраться. Что делаю:

    1) Регистрируюсь в реестре:

    HKLM\SYSTEM\CurrentControlSet\services\eventlog\Application\SvcName

    С единственным параметром EventMessageFile (REG_EXPAND_SZ), который содержит путь к исполняемому файлу.

    2) Создаю ресурс в своём exe`шнике:

    STRINGTABLE
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    {
       0, "Hello"
       1, "Goodbye"
    }




    3) Делаю запись: (код на С++ (надеюсь это проблема :)

    void LogMsg(TCHAR *s)
    {
       if (g_hEventLog)
       {
           LPCTSTR p = s;

           ReportEvent(g_hEventLog, EVENTLOG_INFORMATION_TYPE, 0, 1, NULL, 1, 0, &p, NULL);
       }

    }



    В итоге получаю выше указанное сообщение...
  • clickmaker © (09.11.10 17:32) [1]
  • neversleep (09.11.10 20:40) [2]
    Спасибо, эту статью я видел, и c MESSABETABLE я уже пробовал, результат тот же... Привожу код:

    Содержимое mc файла (mc.exe взят из msvs c++ 6.0):

    SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS
    Informational=0x1:STATUS_SEVERITY_INFORMATIONAL
    Warning=0x2:STATUS_SEVERITY_WARNING
    Error=0x3:STATUS_SEVERITY_ERROR
    )

    FacilityNames=(System=0x0:FACILITY_SYSTEM
    Runtime=0x2:FACILITY_RUNTIME
    Stubs=0x3:FACILITY_STUBS
    Io=0x4:FACILITY_IO_ERROR_CODE
    )

    MessageIdTypedef=DWORD

    LanguageNames=(Neutral=0x000:MSG00000)
    LanguageNames=(Russian=0x419:MSG00419)

    MessageId=0x1
    Facility=Runtime
    Language=Russian
    %1
    .



    Ресурс:

    LANGUAGE LANG_RUSSIAN, SUBLANG_NEUTRAL
    1 MESSAGETABLE MSG00419.bin



    Код добавления в реестр: (сорри что на c++)

    if (!g_hEventLog)
    {
    TCHAR szPath[MAX_PATH];
    wsprintf(szPath, TEXT("SYSTEM\\CurrentControlSet\\services\\eventlog\\Application\\%s"), ServiceName);

    HKEY hKey;
    if (RegCreateKeyEx(HKEY_LOCAL_MACHINE,
         szPath,
         0,
         NULL,
         REG_OPTION_NON_VOLATILE,
         KEY_WRITE,
         NULL,
         &hKey,
         NULL
         ) == ERROR_SUCCESS)

    {
     DWORD dwTmp = GetModuleFileName(hInst, szPath, MAX_PATH);

     _RegSetValue(hKey, TEXT("EventMessageFile"), REG_SZ, szPath, dwTmp);

     dwTmp = EVENTLOG_SUCCESS | EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;
     _RegSetValue(hKey, TEXT("TypesSupported"), REG_DWORD, (TCHAR*)&dwTmp, sizeof(DWORD));

     RegCloseKey(hKey);

     g_hEventLog = RegisterEventSource(NULL, ServiceName);
    }

    }



    Хелп.

    PS
    ResHacker показывает что все ресурсы на месте...
  • clickmaker © (10.11.10 12:31) [3]
    в реестр всё прописалось? g_hEventLog != NULL ?
  • neversleep (10.11.10 14:49) [4]
    Да, все нормально, я упустил один момент:

    #define FACILITY_RUNTIME 0x2

    ReportEvent(g_hEventLog, EVENTLOG_INFORMATION_TYPE, 0, MAKELONG(0x1, FACILITY_RUNTIME), NULL, 1, 0, (const CHAR**)&s, NULL);
 
Конференция "WinAPI" » Своё сообщение в EventLog Windows
Есть новые Нет новых   [134431   +13][b:0][p:0.002]