MC.exe (Message compiler), rc.exe, link.exe для формирования .dll для EventMessageFile

в 19:19, , рубрики: .net, Event Viewer, eventlog, for dummies, windows, винда, для чайников, журнал событий, логирование, разработка под windows

Добрый день, уважаемые читатели Хабра. Данный пост представляет из себя гайд по созданию динамической библиотеки .dll, которая содержит в себе сообщения, необходимые для отображения в кастомном логере, располагающимся в Windows Event ViewerApplication and Services Logsуууу (в качестве примера).

MC.exe (Message compiler), rc.exe, link.exe для формирования .dll для EventMessageFile - 1

В кастомном логе можно часто увидеть сообщения, описание которых содержит:

MC.exe (Message compiler), rc.exe, link.exe для формирования .dll для EventMessageFile - 2

Это означает, что источник событий yyyy не содержит в себе необходимый набор ID и Description.

Для того, чтобы исправить данную ситуацию, необходимо:

1. Открыть regedit по следующему пути: HKLMSYSTEMCurrentControlSetServicesEventLog и убедиться в существовании вашего раздела.

2. Создать eventMessage.txt в который необходимо поместить ваши параметры, пример с msdn, сохранить в необходимой кодировке Windows-1251 или Unicode и формате eventMessage.mc.

Примечание: при наполнении eventMessage вашими ID и description ВСЕГДА после описания необходимо ставить точку с новой строки, и после нее переводить каретку на новую строку.

Пример:

MessageId=0x1
SymbolicName=CAT_1
Language=English
OutDescription for your application
.

MessageId=0x2

Если не учесть данной особенности, то могут быть непредвиденные ошибки во время компиляции.

3. Запустить cmd от имени администратора.

4. Выполнить команду: mc.exe -u C:SomeFoldereventMessage.mc -r C:SomeFolderresult

Примечание: mc.exe, в частном случае, находится в C:Program Files (x86)Windows Kits10bin10.0.16299.0x86 вместо формата -u (Unicode) можно использовать -A (W-1251 или ANSI, данный формат по умолчанию), а параметр -rявляется выходным расположением, куда будут сохранены файлы после компиляции.

После выполнения команды будут созданы: бинарный файл и файл eventMessage.rc в C:SomeFolderresult

5. Выполнить команду: rc.exe C:SomeFolderresulteventMessage.rc

Примечание: rc.exe находится в том же каталоге, где и mc.exe.

После компиляции будет создан файл eventMessage.res, который необходим для создания динамической библиотеки.

6. Выполнить команду: link.exe -dll -noentry /out:C:SomeFolderresultOurMessageSet.dll C:SomeFolderresulteventMessage.res.

Примечание: link.exe находится, в частном случае, в C:Program Files (x86)Microsoft Visual Studio2017CommunitySDKScopeCppSDKVCbin

7. Поздравляю, мы создали с Вами долгожданную библиотеку, но это еще не все. Заходим в regedit к нашему каталогу из шага 1. В поле каталога создаем строковый параметр (string value), именуя сиё творение в EventMessageFile, а в значении указываем путь до нашей библиотеки: C:SomeFolderresultOurMessageSet.dll. Выглядит это так:

MC.exe (Message compiler), rc.exe, link.exe для формирования .dll для EventMessageFile - 3

Рассмотренные инструменты: mc.exe, rc.exe, link.exe.

Да пребудет с Вами сила.

Автор: Bwn_z

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js