visual tutorial toolset studio wix wix3

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 en HKCU 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 .