Просмотр темы форума
Тема: Освобождение COM-объекта
при деинсталляции используется код:
oleobj PV
PV.createobj( "<SomeCOMObject>", "" )
PV.flgs = $FOLEOBJ_INT
PV.release()
После использования библиотека, содержащая <SomeCOMObject> должна удаляться вместе с остальными файлами программы, но не удаляется, пишет, что объект занят каким-то приложением. Пока не завершается процесс деинсталляции, удалить dll'ку невозможно. Подскажите, где искать решение проблемы?
Версия CI 5.16.0
Мы не специалисты в COM объектах. Может для начала как-то узнать приложение, которое не освобождает данную dll.
А без этого вызова удаление нормально проходит?
Может имеет смысл сделать этот вызов из отдельного модуля.
Приложение, которое удерживает COM-объект, и есть Create Install. Это обращение из uninstall.exe, очищающее данные программы при деинсталляции. Стандартными средствами Create Install очистить реестр не получается, так как запись идёт из нашей библиотеки, а как указать, какую ветку использовать, 32- или 64-битную, мы не нашли.
По умолчанию, в деинсталляции используются 32-битные ветки.
Вы можете вручную удалить ветки реестра в процессе деинсталляции. Просто вставьте в скрипт деинсталляции команды Registry - Delete. Там есть чекбокс Access a 64-bit key, отметьте его если нужно удалять 64-битную ветку.
Здравствуйте.
Проблема с освобождением COM-объекта при деинсталляции сохраняется. Это не связано с реестром, COM-объект не освобождается после выполнения release():
oleobj PV
PV.createobj( "<SomeCOMObject>", "" )
PV.flgs = $FOLEOBJ_INT
PV.release()
Каким ещё образом можно очистить переменную PV, разорвать связь с COM-объектом? Возможно, ей как-то можно присвоить значение null или что-то в этом роде?
Если вы подключаете свою DLL, то по-умолчанию она залочена до конца работы процесса и освобождение COM объекта никак на это не влияет.
Если вы загружали DLL через LoadLibrary, то у вас есть идентфикатор.
Вызывайте FreeLibrary( handle ) для освобождения DLL.
Проблему удалось решить вызовом
CoFreeAllLibraries()
Возможно, это кому-то поможет.
16.01.25 Выпущен инсталлятор CreateInstall 8.11.1.
19.06.24 Выпущен инсталлятор CreateInstall 8.11.0. подробнее
13.11.22 Выпущен инсталлятор CreateInstall 8.10.1.
21.05.22 Выпущен инсталлятор CreateInstall 8.10.0.
25.09.21 Выпущен инсталлятор CreateInstall 8.9.0.
15.07.21 Выпущен инсталлятор CreateInstall 8.8.1.