2011-09-08 8 views
6

Me gustaría detectar si ya existe un directorio en una ubicación de instalación personalizada seleccionada por el usuario en la GUI. Intenté lo siguiente:Wix: cómo hacer un DirectorySearch en una ubicación de instalación personalizada

<Property Id="DIRECTORY_PATH"> 
    <DirectorySearch Id="DirectorySearch" Path="[INSTALLDIR]\MyDirectory" /> 
</Property> 

Pero esto no funciona porque DirectorySearch está sucediendo durante AppSearch. Mientras INSTALLDIR se establece más tarde durante InstallDirDlg. Como INSTALLDIR no está configurado a tiempo para AppSearch, DIRECTORY_PATH está configurado incorrectamente en "\ MyDirectory".

Traté de cambiar cuando AppSearch ocurre con InstallUISequence e InstallExecuteSequence, pero solo permitirá que AppSearch venga antes de CostInitialize, no más tarde.

Entonces, ¿cómo hago una búsqueda de directorio en el lugar seleccionado INSTALLDIR?

Respuesta

3

Si solo tiene que esperar la elección del usuario para verificar ese directorio, DirectorySearch no hará el trabajo por usted. Tendrá que crear una acción personalizada de "establecer propiedad" justo después de que el usuario elija INSTALLDIR, por ejemplo, en un Siguiente clic de InstallDirDlg.

ACTUALIZACIÓN. Por lo tanto, quiero decir, básicamente, los siguientes:

  • cuando el usuario llega a la InstallDirDlg de su configuración, él/ella selecciona el directorio, que se pone a la propiedad DIRINSTALACIÓN
  • la InstallDirDlg de diálogo debe entonces desencadenar una costumbre acción sobre el botón Siguiente
  • esta acción personalizada debe recibir todo el valor de la propiedad DIRINSTALACIÓN, y hacer verificar un sistema de archivos sencilla si DIRINSTALACIÓN contiene MiDirectorio
  • si lo hace, la propiedad DIRECTORY_PATH se establece en el valor necesario, por ejemplo, session["DIRECTORY_PATH"] = session[INSTALLDIR] + "\MyDirectory";
  • de lo contrario, no se establece DIRECTORY_PATH (y se puede utilizar este hecho en cualquier condición comprobando NOT DIRECTORY_PATH)

espero que hace que sea más clara.

+0

La elección del usuario solo identifica la ubicación de instalación, no si existe un subdirectorio en el que estoy buscando "MyDirectory" en esa ubicación. Sin DirectorySearch, ¿cómo sabe el instalador si debe establecer la propiedad? – Michael

+0

Deberá simular la búsqueda del directorio usted mismo. Siempre que la Búsqueda de directorios real ocurra durante AppSearch, no se ajusta a sus necesidades. Es por eso que cité la acción "establecer propiedad" - no solo debe establecer una propiedad, sino también hacer un poco de lógica para descubrir si el subdirectorio existe. –

+0

Pensé que el comentario anterior parecía confuso :) Actualizaré mi respuesta –

0

Espero que esto te ayude.

Si ha almacenado el INSTALLDIR de la instalación anterior en el registro, puede obtenerlo y buscarlo. En la secuencia Instalar UI, la ubicación de Installtion apuntará a la ubicación anterior.

<!-- Set previous install location, if available --> 
<Property Id="INSTALLDIR" Secure="yes"> 
    <RegistrySearch Id="InstallRootRegistry" 
        Type="raw" 
        Root="HKLM" 
        Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 
        Name="INSTALLDIR" /> 
</Property> 

<!-- The property WIXUI_INSTALLDIR must be set for the UI to know which directory to use as default --> 
<Property Id="WIXUI_INSTALLDIR" 
      Value="INSTALLDIR" Secure="yes"/> 
Cuestiones relacionadas