2009-02-26 6 views
0

У нас есть большое, развернутое трехуровневое .NET-приложение, которое по хорошим причинам не может быть модернизировано в настоящее время. Клиент использует ряд классических элементов управления ActiveX C++ с помощью обычного механизма взаимодействия.Обновление на лету COM-объекта, используемого в .NET-приложении

Мы исправили некоторые критические ошибки в одном из элементов управления ActiveX и вам нужно развернуть исправления для нескольких клиентов, не переустанавливая клиент. Доступны исправления, включая обновление библиотек DLL. Есть ли способ установить исправленную с ошибкой DLL ActiveX, не требуя нового клиента? Интерфейс, имя файла, идентификаторы GUID и т. Д. Не изменяются.

Я пробовал просто заменять dll без успеха - получил несколько несколько странных ошибок, но возможно, что DLL ActiveX (которая все еще находится в разработке) повреждена - это происходит параллельно.

Должно ли просто подставлять работу dll? Если нет, можете ли вы предложить другой подход, не требующий переустановки, а затем переустановить клиента, который должен работать?

+0

Хотя ошибки, которые вы видите может выглядеть как китайский для вас, они могут обеспечить важный диагностический для других. Это то, что они должны были делать. Все лучше, чем «не работает». –

+0

Справедливая точка - их нет в отчетах об ошибках, но я должен их получить. – mlo

ответ

0

Если интерфейс не изменился, перезапись исходной dll будет работать.

+0

FWIW, я не смог выполнить эту работу таким образом. Обширная работа с поддержкой Microsoft MSDN наконец заставила его работать, также заменив два сгенерированных интерполя. Я до сих пор не понимаю, почему. И мне было бы интересно найти ссылку, в которой вы узнаете, как работает интерфейс C++ -> interop-> COM. – mlo

0

как насчет отмены регистрации перед заменой, а затем повторной регистрации.

regsvr32.exe /u [YOUR DLL HERE] 

затем перезаписать библиотеки DLL, а затем

regsvr32.exe [YOUR DLL HERE] 
+0

Насколько я вижу, это не должно иметь никакого эффекта, если интерфейсы, имена и идентификаторы GUID идентичны. Правда? – mlo

+0

Да, я тоже думаю, что это правильно, но это не принесет никакого вреда, и я могу поклясться, что попал в случаи, когда казалось, что это должно быть ненужным, но трюк. – Rory