Как стать автором
Обновить

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

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



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



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

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

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

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:\SomeFolder\eventMessage.mc -r C:\SomeFolder\result

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

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

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

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

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

6. Выполнить команду: link.exe -dll -noentry /out:C:\SomeFolder\result\OurMessageSet.dll C:\SomeFolder\result\eventMessage.res.

Примечание: link.exe находится, в частном случае, в C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\SDK\ScopeCppSDK\VC\bin

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



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

Да пребудет с Вами сила.
Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии2

Публикации

Истории

Работа

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн