tutorial - ¿Cómo verificar el paquete instalado en WiX 3.0?
wix visual studio 2015 (3)
Como se sugiere aquí :
Pruebe una búsqueda de registro en
HKLM/Software/Microsoft/Windows/CurrentVersion/Uninstall/
{productcode}
. También considere buscar enHKCU
si tanto su producto como la dependencia son productos por usuario.
Esto es así:
<Property Id="CRVSINSTALLED">
<RegistrySearch Id="CRVSInstalledSearch" Root="HKLM" Key="Software/Microsoft/Windows/CurrentVersion/Uninstall/{AA467959-A1D6-4F45-90CD-11DC57733F32}" Name="InstallDate" Type="raw" />
</Property>
<Property Id="CRVSRUNTIMEINSTALLED">
<RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software/Microsoft/Windows/CurrentVersion/Uninstall/{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" Name="InstallDate" Type="raw" />
</Property>
<Property Id="CRVSRUNTIMEINSTALLED">
<RegistrySearch Id="CRVSRunTimeInstalledSearch" Root="HKLM" Key="Software/Microsoft/Windows/CurrentVersion/Uninstall/{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" Name="InstallDate" Type="raw" />
</Property>
Me gustaría verificar que Crystal Reports Basic para Visual Studio 2008 esté instalado como condición para mi propio paquete de instalación.
Encontré esto en la descripción de bootstrapper para este producto (C: / Archivos de programa / Microsoft SDKs / Windows / v6.0A / Bootstrapper / Packages / CrystalReports10_5 / product.xml):
<InstallChecks>
<MsiProductCheck Property="CRVSInstalled" Product="{AA467959-A1D6-4F45-90CD-11DC57733F32}"/>
<MsiProductCheck Property="CRVSRunTimex86Installed" Product="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}"/>
<MsiProductCheck Property="CRVSRunTimex64Installed" Product="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}. "/>
</InstallChecks>
Al tratar de imitar este comportamiento en WiX, hice lo siguiente:
<Property Id="CRVSINSTALLED">
<ComponentSearch Id="CRVSInstalledSearch" Guid="{AA467959-A1D6-4F45-90CD-11DC57733F32}" />
</Property>
<Property Id="CRVSRUNTIMEX86INSTALLED">
<ComponentSearch Id="CRVSRunTimex86InstalledSearch" Guid="{CE26F10F-C80F-4377-908B-1B7882AE2CE3}" />
</Property>
<Property Id="CRVSRUNTIMEX64INSTALLED">
<ComponentSearch Id="CRVSRunTimex64InstalledSearch" Guid="{2BFA9B05-7418-4EDE-A6FC-620427BAAAA3}" />
</Property>
<Condition Message="!(loc.CrystalReportsRequired)">Installed OR CRVSINSTALLED OR CRVSRUNTIMEX86INSTALLED OR CRVSRUNTIMEX64INSTALLED</Condition>
Pero parece que ComponentSearch
está buscando componentes de paquete (archivos, directorios) que tengan sus propios identificadores, en lugar de buscar el paquete en sí.
Entonces, ¿cómo puedo hacer esto?
La API del instalador de Windows tiene la función msi.dll
en msi.dll
para hacer esto. Desafortunadamente, tendrá que escribir una acción personalizada para hacer uso de esto en su instalador. Los ensamblados en C:/Program Files/Windows Installer XML v3/SDK
pueden facilitar esto.
Puede usar la tabla de actualización
<Upgrade Id="36E76465-5548-390F-955A-2776582C6A6C">
<UpgradeVersion OnlyDetect="yes" Property="TFSCLIENT" Minimum="11.0.50727" />
</Upgrade>
<Condition Message="ERROR: Team Explorer for Microsoft Visual Studio 2012 is not installed">
Installed OR TFSCLIENT
</Condition>
Ahora el truco es encontrar el Código de actualización (especificado en el atributo Id anterior). Si tienes un paquete de MSI, simplemente míralo por Orca. Si no lo hace, pruebe esta solución .