У меня есть основное приложение, которое использует отдельное приложение «Установщик пакетов» для самообновления, когда доступна более новая версия. Это обновление будет включать в себя основное приложение, все зависимости DLL, а также сам установщик пакетов. Процесс работает так:
- Главное приложение обнаруживает, что обновление версии доступно
- Основное приложение копирует EXE установщика пакетов во временную папку, а также библиотеки DLL, от которых он зависит, и DLL, от которой они зависят. Другими словами, минимальные компоненты, необходимые для запуска установщика пакетов, копируются во временную папку.
- Основное приложение запускает установщик пакетов из временной папки с помощью Process.Start
- Главное приложение закрывается
- Установщик пакетов копирует новые EXE и DLL в папку приложения.
- Установщик пакетов снова запускает основное приложение
- Установщик пакетов завершает работу
Шаг 5 всегда завершается ошибкой из-за того, что установщик пакетов не может перезаписать файлы, которые используются. Это файлы DLL, которые установщик пакетов загрузил из папки приложения. Это библиотеки DLL, которые не имеют прямых или косвенных ссылок на установщик пакетов.
Я подтвердил (используя Windows Resource Monitor), что именно установщик пакетов (и только этот EXE) загрузил библиотеки DLL из папки приложения. Я также дважды проверил, нет ли ссылок из проекта установщика пакетов на эти библиотеки DLL, напрямую или через другую DLL. Я также убедился, что установщик пакетов загружает библиотеки DLL, от которых он зависит (3 упомянутых выше), из временной папки.
Наконец, я попытался скопировать все приложение (все EXE и DLL) во временную папку перед запуском установщика пакетов, но даже тогда все еще есть какая-то DLL, которую он загружает из папки приложения (на этот раз не упомянутые выше, но Сторонние библиотеки DLL).
Что происходит и что я могу сделать, чтобы подавить загрузку дополнительных DLL?