Проблема не в NSIS, а в , как работает журнал событий , вам нужно установить DLL таблицы сообщений где-нибудь в системе и зарегистрировать ее в реестре.Эта DLL должна оставаться в системе, поскольку она используется средством просмотра журнала событий при просмотре журнала и не используется при регистрации сообщения!Этот дизайн действительно проблематичен для установщика.
Вероятно, лучше просто войти в простой текстовый файл в $ temp или $ exedir.
Если вы действительно хотите использовать Журнал событий ивы не возражаете против хаков, которые вы могли бы:
- Поместить DLL таблицы сообщений в $ pluginsdir и зарегистрироваться / отменить регистрацию при запуске / завершении программы установки (в случае сбоя вы оставляете мусор в реестре!)
- Используйте таблицу сообщений Microsoft / Windows (они не документированы, могут меняться от версии к версии (и пакеты обновления?), Поэтому вам придется тестировать каждую версию и конфигурацию Windows, которую вы поддерживаете!)
Код NSIS выглядит примерно так:
section
System::Call 'advapi32::RegisterEventSource(i0,t "Software Installation")i.r0'
#TODO: Check if $0 == 0 and display error message
System::Call '*(i,&t1000 "Hello world")i.r1'
IntOp $2 $1 + 4
System::Call '*$1(ir2)'
System::Call 'advapi32::ReportEvent(ir0,i ${EVENTLOG_ERROR_TYPE},i0,i 101,i0,i1,i0,ir1,i0)i'
System::Free $1
System::Call 'advapi32::DeregisterEventSource(ir0)'
sectionend