2010-03-02 26 views
9

En mi instalador de WiX, Tengo una propiedad para un ID de usuario que se escribe a una clave del registro:WiX: ¿Cómo puedo establecer una propiedad externamente?

<Property Id='UserID' Value='123' /> 

<Directory Id='TARGETDIR' Name='SourceDir'> 
    <Component Id='UserIDComponent' Guid='C7A5A70E-261C-11DF-9FB7-49AC56D89593'> 
     <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='integer' Value='[UserID]' Name='UserID' /> 
    </Component> 

me gustaría establecer el valor de esa propiedad para el ID de usuario de la persona que descargan mi instalador sobre la marcha. Entonces, cuando se vayan a descargar, solo crearé una copia de la MSI base que todos obtengan, establezca el valor de UserID como el de la persona que descarga el archivo, y eso es lo que descargan. Será el mismo paquete de instalación que todos obtendrán, pero con el conjunto de propiedades personalizado para ellos.

Parece que no encuentro ningún recurso sobre cómo configurar una propiedad WiX MSI desde una fuente externa. ¿Cómo puedo hacer esto?

+0

yo no quiero tener que crear un programa previo, por lo Lo que terminé haciendo fue instalar el SDK de Windows y ejecutar un comando como los que se encuentran aquí http://bit.ly/ctGHth para modificar el valor en mi MSI. Esto me permite darle al usuario un msi, pueden hacer doble clic, sin preocuparse por los parámetros, el parámetro se actualiza con el comando que escribí. Solo tenga en cuenta que debe especificar el tipo correcto de comillas simples, la que está sobre la tilde para palabras clave MSI y el apóstrofo para literales (como ID de usuario y '123'). –

Respuesta

8

Por lo que recuerdo, puede establecer propiedades desde "afuera" - el nombre de la propiedad debe estar en MAYÚSCULAS para ser reconocido como propiedad pública (no me pregunte por qué ...) y luego puede configurarlo así:

msiexec /i C:\Example.msi PROPERTY=VALUE 

Por ej. en su caso

msiexec /i C:\Example.msi USERID=somevalue 

Véase el MSDN docs sobre el uso de las opciones de línea de comandos con MSIEXEC

+1

Eso funcionó, solo tiene que ser msiexec/i C: \ Example.msi USERID = somevalue. Si establece la propiedad entre la opción/i y el nombre de archivo (que es el argumento de la opción), no se instalará. Gracias por su ayuda, eso fue mucho más fácil de lo que esperaba. –

1

Sus opciones parecen ser: -

parámetros (i) línea de comandos en msiexec como por la otra respuesta - frágil , no es realmente una opción si se están descargando y ejecutarlo

(ii) intento de cortar el archivo MSI para insertar el ID - un hack

(iii) inicie MSBUILD para crear un nuevo archivo MSI bajo demanda en el servidor después de modificar una copia del archivo WIX para incluir su ID

(iv) pregenerar muchos archivos MSI con identificadores aleatorios (GUID quizás) en ellos y luego asocie esos ID con los ID de usuario en el momento de la descarga en su base de datos. Ahora proporcione un servicio de búsqueda para asignar la identificación aleatoria en el archivo MSI con la identificación de usuario real para que el programa cuando se ejecuta pueda encontrar la ID de usuario (o tener una acción personalizada que lo haga).

(v) crear una acción personalizada y utilizar MsiGetProperty para obtener el nombre de archivo del instalador - simplemente añadir el ID de usuario al nombre del archivo MSI - truco frágil

Cuestiones relacionadas