2011-01-18 11 views
8

Antecedentes: Tengo un instalador Wix donde se crea un directorio virtual en un sitio web de IIS existente. Se crea el directorio virtual (no existe antes de la instalación), pero el sitio web de IIS ya debe estar creado (el usuario solo elige un sitio web para instalarlo en un ListBox).La ruta física del sitio web de IIS queda en blanco en wix uninstall

El problema: al desinstalar, la ruta de acceso física del sitio web de IIS que se instaló se queda en blanco, sin ningún valor para ese atributo. A continuación se muestra una versión mejorada de mi archivo wix principal. No estoy seguro de por qué la desinstalación está afectando el sitio web de IIS, pero cualquier idea es apreciada.

Notas: Estoy en Wix 3.5 y Windows Server 2008 R2, IIS 7.

<Product> 

    <Property Id='WEBSITE_DESCRIPTION'> 
     <RegistrySearch Id='RememberPropertyWEBSITE_DESCRIPTION' Root='HKCU' 
     Key='SOFTWARE\Company\Product' Name='InstalledWebsiteDescription' 
     Type='raw' /> 
    </Property> 

    <Property Id='WEBSITE_PORT'> 
     <RegistrySearch Id='RememberPropertyWEBSITE_PORT' Root='HKCU' 
     Key='SOFTWARE\Company\Product' Name='InstalledWebsitePort' 
     Type='raw' /> 
    </Property> 


    <Component Id='PropertiesToSave' Directory='ApplicationFolder'> 
     <RegistryValue Root='HKCU' Key='SOFTWARE\Company\Product' 
     Name='InstalledWebsiteDescription' Value='[WEBSITE_DESCRIPTION]' 
     Type='string' /> 
     <RegistryValue Root='HKCU' Key='SOFTWARE\Company\Product' 
     Name='InstalledWebsitePort' Value='[WEBSITE_PORT]' 
     Type='string' /> 

     <RemoveFolder Id='CleanupApplicationFolder' On='uninstall' /> 
    </Component> 


    <Directory Id='TARGETDIR' Name='SourceDir'> 
     <Component Id='TestWebVirtualDirComponent' Guid='12345678-6304-410E-A808-E3585379EADB'> 
     <CreateFolder /> 
     <iis:WebVirtualDir Id='TestWebVirtualDir' Alias='[WEBSITE_VIRTUALDIR]' Directory='TARGETDIR' WebSite='MyWebsite'> 
      <iis:WebApplication Id='TestWebApplication' Name='Test' /> 
     </iis:WebVirtualDir> 
     </Component> 
    </Directory> 

    <iis:WebSite Id="MyWebsite" Description="[WEBSITE_DESCRIPTION]" SiteId="*"> 
     <iis:WebAddress Id="AllUnassigned" Port="[WEBSITE_PORT]" /> 
    </iis:WebSite> 

    <Feature> 
     <ComponentRef Id='TestWebVirtualDirComponent'/> 
     <ComponentRef Id='PropertiesToSave'/> 
    </Feature> 
</Product> 
+0

He usado WIX (3.0 en mi caso) para una instalación relacionados con IIS, también, y me encontré con un par de sorpresas y problemas técnicos. En algunos casos, tuve que recurrir a acciones personalizadas para que funcionase como se esperaba. – Cheeso

Respuesta

5

WiX IIsExtension reconoce la WebSite por Descripción del atributo y el atributo Puerto de niño WebAddress elemento. Entonces, cuando instala su aplicación, establece WEBSITE_DESCRIPTION y WEBSITE_PORT de alguna manera. Sin embargo, cuando ejecuta la desinstalación, las propiedades mencionadas no están configuradas y obtiene el comportamiento que describió.

La solución a esto es guardar los valores de propiedad requeridos en el registro del sistema y usar el elemento RegistrySearch para leer los valores y establecer las propiedades adecuadas. Esto se llama patrón "Recordar propiedad" y Rob Mensching lo explica perfectamente here.

+0

Hola, Yan. De hecho, estoy haciendo eso. He modificado el ejemplo de código anterior para mostrar lo que estoy haciendo. Una "Reparación" funciona como se esperaba, ¿hay algo que deba hacer "en la desinstalación"? –

+1

De acuerdo con su ejemplo, supongo que esperaría que se elimine un directorio virtual en la desinstalación. Si es verdad, también debe "recordar" la propiedad WEBSITE_VIRTUALDIR también. Aparte de esto, no parece sospechoso y debería funcionar. ¿Te encuentras con algún error específico en la desinstalación? ¿O simplemente deja el directorio virtual allí? –

+0

Hola Yan, sí, este era el problema. Guardar el directorio virtual correctamente hizo todo bien en el universo. –

0

tienes que registrar en el registro también [dirVirtual] y [STSWEBALIAS] propiedades
así como [WEBSITE_DESCRIPTION] y [] WEBSITE_PORT.
Aquí es una solución completa que trabajó para mí y para mi equipo:

<Property Id='WEBSITE_DESCRIPTION' Value='Default Web Site'> 
    <RegistrySearch Id='RememberPropertyWEBSITE_DESCRIPTION' Root='HKLM' 
    Key='SOFTWARE\Company\Product' Name='InstalledWebsiteDescription' 
    Type='raw' /> 
</Property> 

<Property Id='WEBSITE_PORT' Value='90'> 
    <RegistrySearch Id='RememberPropertyWEBSITE_PORT' Root='HKLM' 
    Key='SOFTWARE\Company\Product' Name='InstalledWebsitePort' 
    Type='raw' /> 
</Property> 

<Property Id='VIRTUALDIR'> 
    <RegistrySearch Id='RememberPropertyWEBSITE_VIRT' Root='HKLM' 
    Key='SOFTWARE\Company\Product' Name='InstalledWebsiteVirtDir' 
    Type='raw' /> 
</Property> 

<Property Id='STSWEBALIAS'> 
    <RegistrySearch Id='RememberPropertyWEBSITE_STS' Root='HKLM' 
    Key='SOFTWARE\Company\Product' Name='InstalledWebsiteSts' 
    Type='raw' /> 
</Property> 


<DirectoryRef Id="TARGETDIR"> 
    <Component Id='PropertiesToSave' Guid='{384F2559-E7CF-40D2-A2D3-347DBFD15711}'> 
    <RegistryValue Root='HKLM' Key='SOFTWARE\Company\Product' 
     Name='InstalledWebsiteDescription' Value='[WEBSITE_DESCRIPTION]' 
     Type='string' /> 
    <RegistryValue Root='HKLM' Key='SOFTWARE\Company\Product' 
     Name='InstalledWebsitePort' Value='[WEBSITE_PORT]' 
     Type='string' /> 
    <RegistryValue Root='HKLM' Key='SOFTWARE\Company\Product' 
     Name='InstalledWebsiteVirtDir' Value='[VIRTUALDIR]' 
     Type='string' /> 
    <RegistryValue Root='HKLM' Key='SOFTWARE\Company\Product' 
     Name='InstalledWebsiteSts' Value='[STSWEBALIAS]' 
     Type='string' /> 
    </Component> 
</DirectoryRef> 

<Feature Id="Saves"> 
    <ComponentRef Id='PropertiesToSave'/> 
</Feature> 
Cuestiones relacionadas