Медленный запуск wpf из-за политики публикации... возможно
Я развертывал свои сборки.NET с помощью x-copy годами без каких-либо проблем. С прошлой недели у нас есть небольшая команда, в задачу которой входит создание установки, включающей сборки.NET, а также устаревшие exe и C++ exe и dll (более 200 файлов). После первой установки у меня возникла проблема с wpf-приложением: время запуска очень велико. Я профилировал одно из моих wpf-приложений (сборки ps: .NET и GACed, и NGened) с помощью procmon, и я увидел, что этот процесс выполняет операции с несколькими операциями (см. Прикрепленный скриншот) над всеми другими несвязанными (> 200) файлами, и я думаю, что это основная причина медленного запуска приложения. Это связано с политикой издателя.NET? Как я могу отключить это поведение, чтобы снова быстро подать заявку? Заранее спасибо!
1 ответ
Этот набор трасс, по-видимому, связан с реализацией COM на основе "объявленных" COM-классов. Не зная ничего о том, как ваш MSI организован в функции, компоненты и регистрацию COM, трудно быть полностью уверенным.
Но в любом случае, если COM-классы зарегистрированы с использованием таблицы классов в MSI-файле, то у них есть значение реестра InprocServer32 (НЕ ключ), называемое дескриптором Дарвина. Это относится к цели создания экземпляра COM через имя функции, код продукта и код компонента, и именно поэтому вы видите ссылки на функцию установщика Windows и ключи компонентов в реестре. Обычно с этим дескриптором вызывается MsiProvideComponent, что приводит к проверке устойчивости и ремонту в случае поломки.
Вы не говорите, какой инструмент используете, но если у вас много регистраций COM, и все это рекламируется через регистрацию в таблице классов MSI, это может быть проблемой. Не зная, какой инструмент вы используете для сборки MSI и не увидев файл MSI, трудно быть уверенным. Но WiX, например, позволяет вам использовать таблицу Class для регистрации, но использовать Advertise=no, и это приводит к тому, что регистрация выполняется с использованием записей реестра, что является довольно очевидным другим способом создания регистрации COM, избегая при этом проверок рекламы / устойчивости.
Кроме того, возможно, самое главное, вы должны убедиться, что ваш продукт на самом деле не восстанавливается при запуске - это сильно замедлит его работу! Если, например, какие-либо файлы или элементы реестра будут удалены после установки, может начаться восстановление. Найдите записи журнала событий MsiInstaller в журнале событий приложений, относящиеся к отсутствующим компонентам.