Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] Как записать entry в EventLog не перекомпилируя ресурсный message файл 19.07.07 05:10 Число просмотров: 1980
Автор: void <Grebnev Valery> Статус: Elderman
|
Как известно, стандартная процедура включает описание текстового сообщения для каждого MessageId в .mc файле:
MessageId = 100
SymbolicName = EVMSG_INSTALLED
Language = English
The service was installed.
Однако легко увидеть, что для .NET аппликаций мессадж файл не перекомпилируется для любых юзеровских ID и сообщений.
Интересно то, что если "подсунуть" этот единый для .NET аппликаций DLL-модуль сообщений, C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll, для Win32 аппликации, то можно также записывать любые текстовые собщения для любых ID.
Например, WriteEventLog(EVENTLOG_INFORMATION_TYPE, EVMSG_ERROR, _T("some_service")) будет отправлять вполне нормальные сообщения в EventLog, где:
bool WriteEventLog(WORD wType, DWORD dwID, LPCTSTR msg)
{
bool rc = true;
HANDLE hEventSource = ::RegisterEventSource(NULL, _T("MyEvent"));
if (hEventSource) {
LPCTSTR strings[] = {msg};
if ( ! ::ReportEvent(
hEventSource, /* Handle of event source */
wType, /* Event type */
0, /* Event category */
dwID, /* Event identifier */
NULL, /* User Security IDentifer */
1, /* Number of strings to merge with message */
0, /* Size of binary data (in bytes) */
strings, /* Array of strings to merge with message */
NULL) /* Address of binary data */
)
rc = false;
::DeregisterEventSource( hEventSource );
}
else
rc = false;
return rc;
}
Вопрос:
Кто может подсказать, как написать .MC файл, чтобы без его перекомпилляции можно было
записывать в Windows EventLogлюбыекомбинации (ID, MESSAGE)?
Несложные эксперименты с мессадж файл C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll пдсказывают, что скорее всего Microsoft включил (зарезервировал) ну просто огромный блок типа:
MessageId = 1
Language = English
%1
.
MessageId =
Language = English
%1
.
< и т.д. до офигения, типа >
MessageId = 10000
Language = English
%1
.
Кто может подтвердить, что так и есть? Типа самый копи-пэйстнутый копи-пейст от Microsoft? ;)))
Спасибо.
|
- [Win32] Как записать entry в EventLog не перекомпи... - void 19.07.07 05:10 [1980]
|
|
|