Pull to refresh

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

Reading time2 min
Views4.5K
Добрый день, уважаемые читатели Хабра. Данный пост представляет из себя гайд по созданию динамической библиотеки .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.

Да пребудет с Вами сила.
Tags:
Hubs:
Total votes 8: ↑8 and ↓0+8
Comments2

Articles