Пользовательское приложение начальной загрузки WiX и .NET 4.5

У меня возникли трудности с запуском приложения WiX Custom Bootstrapper, предназначенного для .NET 4.5.

У меня есть следующая строка в моем Bundle.wxs.

<PackageGroupRef Id="NetFx45Web" />

Мой BootstrapperCore.config выглядит следующим образом.

<configuration>
    <configSections>
        <sectionGroup name="wix.bootstrapper" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore">
            <section name="host" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" />
        </sectionGroup>
    </configSections>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <wix.bootstrapper>
        <host assemblyName="FSCustomBA" />
    </wix.bootstrapper>
</configuration>

Я пробовал несколько вариантов этого.

Например, я также пробовал следующее.

<host assemblyName="FSCustomBA">
    <supportedFramework version="v4\Full" />
    <supportedFramework version="v4\Client" />
</host>

И следующее.

<host assemblyName="FSCustomBA">
    <supportedFramework version="v4.5\Full" />
    <supportedFramework version="v4.5\Client" />
</host>

И следующее.

<host assemblyName="FSCustomBA">
    <supportedFramework version="v4.5" />
</host>

И следующее.

<host assemblyName="FSCustomBA">
    <supportedFramework version="v4.5\Full" />
</host>

И следующее.

<host assemblyName="FSCustomBA">
    <supportedFramework version="v4.5\Client" />
</host>

Независимо от того, что я пробовал, когда я запускаю свой установочный пакет в системе, в которой не установлен .NET 4.5, мне предлагается установить .NET 4.5. Как только я нажимаю кнопку «Согласен и установить», происходит сбой пакета установки. Когда я снова пытаюсь запустить пакет установки, он зависает до того, как отобразит кнопки. Зависает даже после перезагрузки. Мне нужно восстановить мою систему из образа системы, прежде чем она снова запустится.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

Я использую WiX 3.10.

До сих пор моя единственная подсказка о том, что происходит, - это следующая строка в результирующих файлах журнала.

[1A14:1778][2016-06-28T10:01:17]i000: The prerequisites were already installed. The bootstrapper application will not be reloaded to prevent an infinite loop.

Это упоминается в другом вопросе здесь о переполнении стека, необходимом приложении начальной загрузки. не удается установить .NET 4.5. Один из ответов на этот вопрос предполагает, что ответ заключается в установке значения sku в элементе supportRuntime файла BootstrapperCore.config. Тем не менее, я сделал это. Происходит что-то еще.


person Ben Key    schedule 25.06.2016    source источник
comment
Я имею представление о том, что происходит. Я последовал примеру приложений WixBA и TestBA, которые являются частью WiX, то есть назвал файл BootstrapperCore.config по образцу ${ProjectName}.BootstrapperCore.config. Чего я не понял, так это того, что когда этот файл включается в пакет через элемент Payload, вам нужно использовать атрибут Name, чтобы переименовать его в BootstrapperCore.config.   -  person Ben Key    schedule 28.06.2016
comment
Теперь я получаю другую ошибку.: 0x80131040: определение манифеста расположенной сборки не соответствует ссылке на сборку.   -  person Ben Key    schedule 28.06.2016
comment
Я устранил ошибку 0x80131040: определение манифеста расположенной сборки не соответствует ссылке на сборку, установив для атрибута SuppressSignatureVerification значение yes для элемента Payload, связанного с моим настраиваемым BA. Я думаю, что это необходимо только потому, что я использую тестовый (самозаверяющий) сертификат вместо доверенного сертификата.   -  person Ben Key    schedule 29.06.2016


Ответы (1)


Я публикую ответ на свой вопрос в надежде, что он принесет пользу другим, столкнувшимся с подобными проблемами.

Оказывается, проблема была не в содержимом моего файла BootstrapperCore.config, а в названии моего файла BootstrapperCore.config. То есть окончательное содержимое моего файла BootstrapperCore.config оказалось именно тем, что я указал в своем вопросе, а именно следующим.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="wix.bootstrapper" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore">
            <section name="host" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" />
        </sectionGroup>
    </configSections>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <wix.bootstrapper>
        <host assemblyName="FSCustomBA" />
    </wix.bootstrapper>
</configuration>

Я был на неверном пути, когда попробовал несколько вариантов, включающих использование поддерживаемого элемента Framework. Оказалось, что проблема не в этом. Вместо этого проблема заключалась в том, что я последовал примеру приложений WixBA и TestBA, которые являются частью WiX, то есть назвал файл BootstrapperCore.config по образцу ${ProjectName}.BootstrapperCore.config. Поскольку мой проект называется FSCustomBA, мой файл BootstrapperCore.config был назван FSCustomBA.BootstrapperCore.config.

Это хорошо. Его можно заставить работать. Однако я не понял, что файл должен называться BootstrapperCore.config в контексте каталога .ba, который создается при запуске пакета установки. Поскольку я не знал об этом, я включил файл в свой пакет следующим образом.

<Payload SourceFile="$(var.FSCustomBA.TargetDir)FSCustomBA.BootstrapperCore.config" />

Так не пойдет. Следующее будет.

<Payload Name="BootstrapperCore.config"  SourceFile="$(var.FSCustomBA.TargetDir)FSCustomBA.BootstrapperCore.config" />

Обратите внимание на использование атрибута Name в элементе Payload. Это говорит о том, что нужно назвать файл BootstrapperCore.config в каталоге .ba.

После того, как я решил эту проблему, я столкнулся со следующей ошибкой: «0x80131040: определение манифеста обнаруженной сборки не соответствует ссылке на сборку». В файле журнала это было записано как невозможность загрузить приложение Managed Bootstrapper.

Чтобы решить эту проблему, я просто установил для атрибута SuppressSignatureVerification значение yes для элемента Payload, связанного с моим настраиваемым BA. Например, элемент Payload, который я использую, выглядит следующим образом.

<Payload SourceFile="$(var.FSCustomBA.TargetDir)FSCustomBA.dll" SuppressSignatureVerification="yes" />

Я думаю, что это необходимо только из-за сертификата подписи кода, который я использую.

Мой работодатель использует официальный сертификат подписи кода от VeriSign для всех официальных сборок. Однако детали этого сертификата держатся в секрете даже от большинства разработчиков. Вместо этого разработчики используют самоподписанный сертификат для своей повседневной работы. Это работает для большинства вещей, но, видимо, не для этого.

Теперь, когда я решил эти проблемы, мое приложение Custom Bootstrapper загружается и, за исключением одной незначительной ошибки, работает должным образом.

Я надеюсь, что, документируя свои выводы, я избавлю других от головной боли, через которую мне пришлось пройти, чтобы решить эту проблему.

person Ben Key    schedule 28.06.2016
comment
Та же проблема возникает, если вы забыли включить файл конфигурации в полезные данные. Спасибо! - person Ed Bayiates; 17.01.2018