2009-12-22 22 views
6

Estoy usando VisualStudio2005 y vdproj para crear un archivo MSI simple. Necesito pasar la propiedad REINSTALLMODE cuando lo ejecute.Pasando REINSTALLMODE a un archivo MSI

Sé que esto puede hacerse a través de línea de comandos, así: msiexec.exe /i foo.msi REINSTALLMODE=amus

Sin embargo, si un usuario decide hacer clic en el msi directamente (de iniciar el asistente), la propiedad no se pasa. ¿Es posible hacer esto a través de VS y vdproj?

Algunas opciones que he investigado:

  • Cuando construyo el MSI a través de VS, sino que también produce un setup.exe. ¿Hay alguna manera de pasar la propiedad REINSTALLMODE a través de esto tal vez?
  • Instalé Orca, que me permite ver/editar la tabla de propiedades del MSI. Podría agregarlo de esta manera, pero luego tendría que agregarlo cada vez que hago una compilación de MSI.

Gracias por cualquier consejo.

Respuesta

4

Lamentablemente, no puedo encontrar la manera de establecer otras propiedades de MSI en VStudio.

No obstante, un método que se debe trabajar es la siguiente:

  1. Uso Orca para crear una transformación (MST) que sólo cambia la propiedad REINSTALLMODE. (En resumen, edite la propiedad & guárdela como una nueva transformación, luego use el comando "Generar transformación" para crear el MST).
  2. Esta transformación se puede aplicar directamente a su MSI usando el comando MSITRAN.EXE (disponible en el mismo Windows Installer SDK donde encontraste Orca).
  3. Puede: (a) encontrar una forma de que Visual Studio siempre ejecute su comando MSITRAN inmediatamente después de la compilación de MSI, o (b) simplemente ejecute su MSITRAN manualmente (desde un archivo por lotes o similar) después de compilar pero antes de la prueba
+0

Me gusta su estilo, gracias por la respuesta detallada. Déjame probar esto ... – Ken

+1

(Probablemente debería intentar usar WiX si este msi se vuelve más complicado) – Ken

+0

De hecho, WiX te da acceso a todas las complejidades de Windows Installer. Pero es un poco una curva de aprendizaje. ¡Buena suerte! – ewall

7

Encontré una forma más automática de hacerlo.

Crear un script llamado add_reinstall_prop.vbs (ejemplo) con el folowing:

set objArgs = WScript.Arguments 
set o_installer = CreateObject("WindowsInstaller.Installer") 
set o_database = o_Installer.OpenDatabase(objArgs(0), 1) 
s_SQL = "INSERT INTO Property (Property, Value) Values('REINSTALLMODE', 'amus')" 
set o_MSIView = o_DataBase.OpenView(s_SQL) 
o_MSIView.Execute 
o_DataBase.Commit 

Añadir un evento posterior a la generación a su proyecto de instalación llamar al script con lo siguiente:

add_reinstall_prop.vbs $(BuiltOuputPath) 

Esto agregará automáticamente la entrada deseada al MSI integrado. Luego puede verificarlo con Orca para ver que la entrada ahora se agrega automáticamente después de la compilación.

+0

Gracias, hombre, funciona como el encanto. Necesito usar comillas dobles para add_reinstall_prop.vbs "$ (BuiltOuputPath)" –