WiX Bootstrapper — трудно определить, установлено ли программное обеспечение C ++, распространяемый, SQL Server Compact 3.5 SP2

До сих пор (благодаря сообщению от Роба Меншинга) мой код обнаружит .NET 4.0, если он установлен, и будет проходить через него. Я не могу правильно определить Microsoft Visual C ++ 2010 x86 распространяемый ИЛИ Microsoft SQL Server Compact 3.5 с пакетом обновления 2 (SP2).

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

<!-- Search for .NET 4.0 -->
<util:RegistrySearch Id="NETFRAMEWORK40"Root="HKLM"Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"Value="Install"Variable="NETFRAMEWORK40"Result="value"/>
<!-- Search for Microsoft Visual C++ 2010 x86 Redistributable -->
<util:RegistrySearch Id="SearchForCPP2010X86"Root="HKLM"Key="SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86"Value="Install"Variable="CPP2010Redist"Result="exists"/>
<!-- Search for Microsoft SQL Server Compact 3.5 Service Pack 2 -->
<util:RegistrySearch Id="SearchForSQLSvrCE35SP2"Root="HKLM"Key="SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.5\ENU"Value="Install"Variable="SQLSvrCE35SP2"Result="exists"/>

<Chain>
<!-- Install .NET 4 Full -->
<PackageGroupRef Id="Net4Full"/>
<!-- Install Microsoft Visual C++ 2010 x86 Redistributable -->
<PackageGroupRef Id="MSVisCPP2010x86Redist"/>
<!-- Install Microsoft SQL Server Compact 3.5 Service Pack 2 -->
<PackageGroupRef Id="SQLExpressCE"/>
</Chain><!-- Install .NET 4.0 -->
<PackageGroup Id="Net4Full">
<ExePackage Id="Net4Full"Name="Microsoft .NET Framework 4.0 Setup"Cache="no"Compressed="yes"PerMachine="yes"Permanent="yes"Vital="yes"SourceFile="BootstrapperLibrary\dotNetFx40_Full_setup.exe"DetectCondition="NETFRAMEWORK40"/>
</PackageGroup>

<!-- Install Microsoft Visual C++ 2010 x86 Redistributable -->
<PackageGroup Id="MSVisCPP2010x86Redist">
<ExePackage Id="MSVisCPP2010x86Redis"Name="Microsoft Visual C++ 2010 x86 Redistributable "Cache="no"Compressed="yes"PerMachine="yes"Permanent="yes"Vital="yes"SourceFile="BootstrapperLibrary\vcredist_x86.exe"DetectCondition="CPP2010Redist"/>
</PackageGroup>

<!-- Install Microsoft SQL Server Compact 3.5 Service Pack 2 -->
<PackageGroup Id="SQLExpressCE">
<ExePackage Id="SQLExpressCE"Name="Microsoft SQL Server Compact 3.5 Service Pack 2 Setup"Cache="no"Compressed="yes"PerMachine="yes"Permanent="yes"Vital="yes"SourceFile="BootstrapperLibrary\SSCERuntime-ENU.exe"/>
</PackageGroup>

2

Решение

Мне удалось придумать следующее решение. Это не идеально, но пока работает. Нам дали очень короткое время, чтобы придумать что-то, так что это то, что «работает» на данный момент.

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

Руководство по WiX

WiX учебник

Мне также удалось получить копию книги «WiX 3.6: Руководство разработчика по XML для установщика Windows», которая оказалась полезной. Это было бы чрезвычайно полезно, если бы оно было доступно с первого дня.

Моя единственная жалоба на онлайн-руководство по WiX заключается в том, что у него нет копии (которую я мог бы найти), базирующейся здесь, в США. Мне пришлось подать запрос на утверждение веб-сайта через наш отдел сетевой безопасности. Теперь у меня есть доступ, но мне пришлось ждать день, чтобы использовать его. Когда вы находитесь в очень тесном цикле разработки, один день — это большое дело.

Первоначально частью моей истории был поиск как 32-, так и 64-битных версий SQL Server CE. У меня были небольшие проблемы с 64-битной версией, и у меня не хватило времени, поэтому я использовал прикрепленный файл для загрузки как 32-, так и 64-битных установочных файлов, когда это применимо.

<!--Search for .NET 4.0-->
<util:RegistrySearch Id="NETFRAMEWORK40"Root="HKLM"Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"Value="Install"Variable="NETFRAMEWORK40"Result="value"/>
<!--Search for Microsoft Visual C++ 2010 x86 Redistributable-->
<util:RegistrySearch Root="HKLM"Key="SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86"Variable="CPP2010Redist"Value="Installed"Result="value"/>
<!--Search for Microsoft SQL Server Compact 3.5 Service Pack 2 x86-->
<util:RegistrySearch Id="SqlCeRegistryx86"Root="HKLM"Key="SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v3.5\ENU"Variable="SQLSvrCE35SP2x86"Win64="no"Result="exists"/><Chain>
<!-- Install .Net 4 Full -->
<PackageGroupRef Id="Net4Full"/>
<!-- Install Microsoft Visual C++ 2010 x86 Redistributable -->
<PackageGroupRef Id="MSVisCPP2010x86Redist"/>
<!-- Install Microsoft SQL Server Compact 3.5 Service Pack 2 x86 -->
<PackageGroupRef Id="SQLExpressCEx86"/>
</Chain><Fragment Id="Prerequisites">
<!--.NET 4.0-->
<PackageGroup Id="Net4Full">
<ExePackage Id="Net4Full"Cache="no"Compressed="yes"PerMachine="yes"Permanent="yes"Vital="yes"SourceFile="BootstrapperLibrary\dotNetFx40_Full_setup.exe"DetectCondition="NETFRAMEWORK40"/>
</PackageGroup>
<!--Microsoft Visual C++ 2010 x86 Redistributable-->
<PackageGroup Id="MSVisCPP2010x86Redist">
<ExePackage Id="MSVisCPP2010x86Redist"Cache="no"Compressed="yes"PerMachine="yes"Vital="yes"SourceFile="BootstrapperLibrary\vcredist_x86.exe"DetectCondition="CPP2010Redist"/>
</PackageGroup>
<!--Microsoft SQL Server Compact 3.5 Service Pack 2 x86-->
<PackageGroup Id="SQLExpressCEx86">
<ExePackage Id="SQLExpressCEx86"Cache="no"Compressed="yes"PerMachine="yes"Vital="yes"SourceFile="BootstrapperLibrary\SSCERuntime-ENU.exe"DetectCondition="SQLSvrCE35SP2x86"/>
</PackageGroup>

4

Другие решения

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

Microsoft Аарон Стебнер говорит в своем личном блог:

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

Заявленная цель вашего установщика состоит в том, чтобы конечное состояние библиотек времени выполнения VC 2010 работало на определенном уровне пакета обновления. Он сообщает об этой цели распространяемому продукту и (надеюсь) достигает ее эффективно с помощью любого процесса установки и / или ремонта, который он сочтет необходимым.

Ключевые вещи, чтобы получить право в ExePackage являются InstallCommand а также ExitCodes. В идеале это должно быть официально задокументировано. Коды выхода несколько стандартизированы для обозначения сбоя, требуется успешная перезагрузка сейчас, требуется успешная перезагрузка (см. первая нота).

0

По вопросам рекламы [email protected]