2011-06-29 9 views
7

He visto esta pregunta muchas veces pero ninguna de las respuestas parece funcionar para mí. Obviamente me falta algo elemental, ¡pero parece que no puedo descubrir qué es! Solo he usado WiX durante un par de días, así que todavía soy muy nuevo en eso.El archivo de comprobación de WiX existe antes de la instalación

Básicamente, he creado un complemento para un producto existente, y quiero verificar que el producto esté instalado antes de permitir que se instale mi complemento. Creo que la forma más simple es verificar que el ejecutable principal esté en el directorio correcto.

Mi código relevante hasta el momento:

<Property Id="FILEEXISTS"> 
    <DirectorySearch Id="CheckFileDir" Path="INSTALLDIR" Depth="0"> 
    <FileSearch Id="CheckFile" Name="main.exe" /> 
    </DirectorySearch> 
</Property> 

<Condition Message="File does exist.">NOT FILEEXISTS</Condition> 

Dónde INSTALLDIR es el Id del directorio en el main.exe debe ser y se define en las etiquetas anidadas Directory.

Respuesta

5

Las búsquedas se ejecutan antes de que el usuario pueda establecer una carpeta de instalación a través de los cuadros de diálogo MSI. Por lo tanto, este enfoque no funcionará de la manera que desee.

Si desea buscar un archivo en la carpeta de instalación, sugiero una acción personalizada de IU ejecutada a través de un evento de control DoAction. Este evento puede ser activado por el botón Siguiente en su cuadro de diálogo de selección de carpeta.

No hay acciones personalizadas predefinidas para esto, por lo que tendrá que escribir una con código personalizado. Debe ser una DLL o VBScript que recibe el identificador de instalación. Puede encontrar un pequeño tutorial aquí: http://www.codeproject.com/KB/install/msicustomaction.aspx

+1

¡Buen punto, Cosmin! Supongo que en este caso el INSTALLDIR debería ser buscado en el registro donde la instalación de la aplicación principal lo puso en ... –

+0

Sí, recuperar la ruta de instalación anterior desde el registro es una buena idea. –

+0

Hola, gracias por eso. Entiendo por qué ahora. Cambiaré a una búsqueda de registro para obtener la ruta para una solución más completa. Mientras tanto, lo tengo que trabajar cambiando @Path a "[ProgramFilesFolder] Manufacturer/ProductFolder" y la condición a "FILEEXISTS" en lugar de "NOT FILEEXISTS" – Chris

1

Supongo que omite los corchetes [] alrededor de INSTALLDIR en @Path. Además, @ Depth = 0 parece sospechoso, simplemente omita este atributo para una búsqueda simple, debe establecerse en 1 y esto es lo que normalmente necesita para buscar un archivo en un directorio.

Espero que ayude, pero para ser estricto, su pregunta no contiene la verdadera pregunta. Es difícil de entender si está recibiendo un error, o la condición simplemente no funciona ...

+0

Lo siento, es que la condición no funciona. Independientemente de si el archivo 'main.exe' está allí o no, la aplicación se instalará independientemente. He probado @Path con y sin [], y solo intenté omitir @Profundidad, pero fue en vano. ¿Importa si el directorio todavía está allí aunque el archivo no lo esté? Cheers – Chris

+0

No estoy seguro de lo que quiere decir, pero la propiedad FILEEXISTS se establecerá solo en caso de que el archivo se encuentre en la carpeta en la que está buscando. Por cierto, examine el archivo de registro para saber si se establece la propiedad FILEEXISTS y qué el valor –

Cuestiones relacionadas