Здравстствуйте, господа.
При деинсталляции дистрибутива, созданного с помощью InstallShield 6.1 Professional, иногда не дерегистрируется (unregister) ActiveX — выдается стандартное диалоговое окно, в котором говорится, что
One or more files did not properly self-register, ну и т.д. Причем для DLL'ки с ActiveX'ом утверждается, что
не найден один из файлов библиотек, необходимых для выполения данного приложения, а если посмотреть на диск, то — действительно — никаких файлов (в том числе и DLL'ки с ActiveX'ом) уже нет.
Диагноз такой: при деинсталляции сначала удаляются файлы, а потом происходит дерегистрация ActiveX'ов.

IMHO это неправильно, но как это объяснить InstallShield'у?
Причем если DLL'ка с ActiveX'ом заблокирована приложением, которое этот объект использует, то все проходит отлично (для соответствующих файлов указано, что они могут быть заблокированы).
Что делать? Кто виноват?
Заранее спасибо
ЗЫ Ручную регистрацию/дерегистрацию ActiveX'а не предлагать!
Здравствуйте KA, Вы писали:
KA>Здравстствуйте, господа.
KA>При деинсталляции дистрибутива, созданного с помощью InstallShield 6.1 Professional, иногда не дерегистрируется (unregister) ActiveX — выдается стандартное диалоговое окно, в котором говорится, что One or more files did not properly self-register, ну и т.д. Причем для DLL'ки с ActiveX'ом утверждается, что не найден один из файлов библиотек, необходимых для выполения данного приложения, а если посмотреть на диск, то — действительно — никаких файлов (в том числе и DLL'ки с ActiveX'ом) уже нет.
KA>Диагноз такой: при деинсталляции сначала удаляются файлы, а потом происходит дерегистрация ActiveX'ов.
IMHO это неправильно, но как это объяснить InstallShield'у?
KA>Причем если DLL'ка с ActiveX'ом заблокирована приложением, которое этот объект использует, то все проходит отлично (для соответствующих файлов указано, что они могут быть заблокированы).
KA>Что делать? Кто виноват?
KA>Заранее спасибо
KA>ЗЫ Ручную регистрацию/дерегистрацию ActiveX'а не предлагать!
поставить разрегистрацию перед удалением файлов

посмотри порядок выполнения энжайном операций, которые ты поставил...
Здравствуйте romiro, Вы писали:
KA>>При деинсталляции дистрибутива, созданного с помощью InstallShield 6.1 Professional, иногда не дерегистрируется (unregister) ActiveX — выдается стандартное диалоговое окно, в котором говорится, что One or more files did not properly self-register, ну и т.д.
[skipped]
R>поставить разрегистрацию перед удалением файлов
Это где? Self-registered и may be locked ключики стоят.
R>посмотри порядок выполнения энжайном операций, которые ты поставил...
Как я уже написал, то сначала происходит удалений , а уж потом разрегистрация (!)...
KA>При деинсталляции дистрибутива, созданного с помощью InstallShield 6.1 Professional, иногда не дерегистрируется (unregister) ActiveX — выдается стандартное диалоговое окно, в котором говорится, что One or more files did not properly self-register, ну и т.д. Причем для DLL'ки с ActiveX'ом утверждается, что не найден один из файлов библиотек, необходимых для выполения данного приложения, а если посмотреть на диск, то — действительно — никаких файлов (в том числе и DLL'ки с ActiveX'ом) уже нет.
[...]
KA>Что делать? Кто виноват?
В данном случае виноват, как мне кажется, InstallShield.

Если отследить происходящее при деинсталляции, то выполняется следующее:
1. Вызывается OnUninstalling-обработчик для ActiveX-компонента (DLL'ка для ActiveX'а все еще на месте).
2. Удаляется DLL'ка.
3. Вызывается OnUninstalled-обрабтчик для ActiveX-компонента.
4. Выполняется дерегистрация для ActiveX'а (!).
Даже выполнение действия
4 перед действием
2 не поможет, поскольку "обвиняемый" уже прибил все DLL'ки от которых DLL'ка с ActiveX'ом зависит.
Данное поведение наблюдалось вплоть до версии 6.31.

Дальнейшие попытки сговориться с InstallShild'ом более поздней версии не предпринимались за неимением оной.
Вполне может быть, что вину InstallShield'а я немножко преувеличиваю, поскольку в фазе инсталляции (моего дистрибутива) имеются некоторые навороты.
Тем не менее, более-менее подходящее решение я все-таки нашел.
Необходимо просто заблокировать каким-либо способом DLL'ку с ActiveX'ом, а также все DLL'ки, от которых первая зависит.
1. В OnMoving-обработчике вызываем UseDLL для DLL'ки с ActiveX'ом.
2. В OnMoved-обработчике "отпускаем" DLL'ку.
Вот такие дела... Надеюсь, что в ISPro7 хоть этот глюк (?) исправлен

Если это действительно глюк...