Я расширяю свой Inno-Setup script с помощью кода, который лучше всего реализовать на С# в управляемой DLL. Я уже знаю, как экспортировать методы из управляемой библиотеки DLL в качестве функций для использования в неуправляемом процессе. Это можно сделать с помощью соткания IL, и есть инструменты для автоматизации этого:
- NetDllExport (написано мной)
- UnmanagedExports
Поэтому после экспорта я могу вызвать свои функции из Pascal script в установщике Inno-Setup. Но тогда есть одна проблема: DLL больше не может быть выгружена. Использование Inno-Setup UnloadDLL(...)
не имеет эффекта, и файл остается заблокированным до завершения установки. Из-за этого установка ждет 2 секунды, а затем не удалит мой DLL файл из временного каталога (или установочного каталога). Фактически, он действительно остается там, пока кто-то не очистит диск.
Я знаю, что управляемые сборки не могут быть выгружены из AppDomain больше, если весь AppDomain не закрыт (процесс завершается). Но что это означает для неуправляемого хост-процесса?
Есть ли лучший способ разрешить Inno-Setup выгружать или удалять мой DLL файл после загрузки и использования?