[Из песочницы] MC.exe (Message compiler), rc.exe, link.exe для формирования .dll для EventMessageFile
Добрый день, уважаемые читатели Хабра. Данный пост представляет из себя гайд по созданию динамической библиотеки .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.
Да пребудет с Вами сила.