WISE - COM регистрация сервера опция "Не регистрироваться" не работает?
Я создал инсталлятор для приложения Delphi, использующего внутрипроцессный (DLL) COM-сервер. Я настроил библиотеку DLL в проекте Wise как "Не регистрировать", но после пробной установки она все равно регистрируется?
Это "недокументированная особенность" WISE или я что-то не так делаю?
У кого-нибудь есть обходной путь или решение этой проблемы?
PS Причина, по которой я не хочу регистрировать DLL, заключается в том, что на целевом ПК этот COM-сервер уже может быть зарегистрирован для другого приложения с конкретными настройками (модель потоков, путь и т. Д.), К которым я не хочу прикасаться.
2 ответа
Я нашел возможное решение или обходной путь (возможно, потому что я не понимал его до конца, но он работает).
COM DLL будет зарегистрирована на целевом ПК, даже если она помечена как "Не регистрироваться", в случае, если она зарегистрирована на компьютере развертывания. Решение:
- незарегистрированная DLL с локального (развернутого) ПК
- Удалить его из установочного пакета, сохранить (и скомпилировать) пакет
- повторно добавьте COM DLL в пакет, отметьте его "Не регистрировать", сохраните и скомпилируйте.
После этих шагов все работает как положено - DLL не зарегистрирована на целевом ПК.
Кажется, это происходит из-за рекламы установщика Windows (которую я до сих пор не понял должным образом), но из документации WISE я обнаружил:
"Как происходит сбор информации о саморегистрации При добавлении в установку файла.DLL или.OCX, содержащего информацию о саморегистрации COM, сканируется информация о регистрации и в установку добавляются соответствующие ключи реестра. Эта система регистрации более надежнее, чем позволить файлу самостоятельно регистрироваться во время установки, поскольку это не зависит от наличия других файлов на конечном компьютере или от того, насколько хорошо файл.OCX или.DLL соответствует соглашениям о самостоятельной регистрации."
По этой причине в качестве дополнительной меры перед вышеописанными шагами я изменил параметры WISE Advertising:
Инструменты> Параметры... вкладка Реклама">
За Advertising Setting:
выбранный Do not scan advertising information
вариант.
Непроверенный вариант Automatically add self-registration
,
Все, что написано, является актуальным решением, но благодаря ответу @Christopher Painter я был введен в терминологию "DLL Hell", особенно для COM DLL, так что в качестве LONG-TERM решения (в перспективе) я бы проверил активацию COM без регистрации. Компоненты ( ссылка).
Я пытаюсь избежать этого превращения в "какой инструмент я должен использовать поток". Тем не менее, WiX/IsWiX является бесплатным открытым исходным кодом и должен отвечать вашим потребностям. (Трудно сказать наверняка, поскольку я понятия не имею, какие еще требования предъявляет этот MSI.)
Тем не менее, есть ли шанс, что DLL уже была зарегистрирована? Вы тестируете на виртуальной машине со снимком или в другой воспроизводимой среде, где вы можете быть на 100% уверены, что это не так?
Если да, есть ли в мудром сценарии какие-либо другие действия, которые могли бы вызвать регистрацию? Я не знаю об ошибке / функции, но если это так, вы - SOL, потому что этот продукт давно умер, и нет поддержки или обновлений.
Последнее замечание Вы комментируете, что DLL уже может быть там и зарегистрирована... это называется DLL ад. Что если его там нет... сейчас вы не зарегистрированы. У вас есть некоторые проблемы с дизайном, которые вы должны решить, прежде чем надеяться получить качественный опыт установки независимо от того, какой инструмент вы используете.