Как обновить развернутую библиотеку классов (DLL)? - PullRequest
0 голосов
/ 21 апреля 2011

В настоящее время у меня есть решение C #, которое содержит библиотеку классов, установщик и проекты установки. Проект установки генерирует MSI для установки моей библиотеки классов (dll), зарегистрированной vsdrfCOM, на которую ссылается после установки стороннее приложение на клиенте конечных пользователей. У меня нет никакого контроля над сторонним приложением. Все это работает, как и ожидалось, и на мою библиотеку классов ссылаются без проблем, и ее можно установить / переустановить через развернутый MSI.

К сожалению, проблема, которую я пытаюсь решить, заключается в том, как применять обновления к библиотеке классов (dll), не ожидая, что конечный пользователь удалит через MSI, загрузит новый MSI и запустит его. Также есть папки / файлы пользовательских состояний, которые я бы хотел сохранить. По сути, просто переписать библиотеку классов (dll). Первоначально я снимал для инициализации библиотеки, поиска удаленного местоположения, проверки версии и загрузки новой библиотеки DLL, если это необходимо. Затем сообщите пользователю, что ему нужно перезапустить стороннее приложение.

  1. Простая загрузка новой dll и создание паролей поверх старой не похоже на работу, даже если поддерживаются CLSID, так как кажется, что реестру что-то не нравится. Вдохновленный проектом автообновления, расположенным здесь, http://www.codeproject.com/KB/vb/Auto_Update_Revisited.aspx

  2. ClickOnce не работает с библиотеками классов, если к нему не привязано приложение Forms / Console.

  3. Не уверен, что новый MSI можно загрузить и запустить поверх старого пассивно, без перезаписи файлов состояния пользователя, упомянутых выше.

Итак, есть ли способ обновить dll, которая была установлена ​​с MSI при указанных выше условиях?

Спасибо.

1 Ответ

0 голосов
/ 22 апреля 2011

Что, если ваша библиотека классов состоит из двух .dll, скажем, библиотеки A и библиотеки B.

Библиотека A предоставляет интерфейс стороннему приложению, но откладывает фактическую логику на библиотеку B. Каждый раз, когда библиотека A загружается, она загружает библиотеку B, сначала проверяя наличие новой версии в Интернете и загружая ее, если она доступна. Ваш MSI теоретически может установить только библиотеку A и рассчитывать на загрузку библиотеки B во время выполнения. (Хотя это, вероятно, хорошая идея, чтобы включить оба в случае, если интернет-соединение не работает)

...