- PVSM.RU - https://www.pvsm.ru -

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

Добрый день, уважаемые читатели Хабра. Данный пост представляет из себя гайд по созданию динамической библиотеки .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 [1], сохранить в необходимой кодировке 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

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/windows/295493

Ссылки в тексте:

[1] пример с msdn: https://docs.microsoft.com/en-us/windows/desktop/eventlog/message-files

[2] Источник: https://habr.com/post/426121/?utm_campaign=426121