-
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);