Pregunta

Desarrollamos un producto que nuestros clientes distribuyen a sus clientes. Debemos permitir que el administrador de la empresa cliente realice cambios de configuración en el instalador antes de enviarlo al usuario final. Los cambios de configuración en este caso significan un par de entradas de registro que se realizarán en la computadora de los usuarios finales. ¿Cómo hago esto?

¿Fue útil?

Solución

Por favor, compruebe esto: http://ozgrant.com/2008 / 03/11 / customizing-your-wix-msi-with-transform-files /

Aquí,

  • El equipo de desarrollo crea un instalador genérico.
  • El equipo de TI crea diferentes transformaciones (archivos .mst) utilizando Orca y
  • Este instalador con .mst particular se envía a un conjunto diferente de clientes.

HTH

Otros consejos

Aquí hay un ejemplo de script que enviamos a nuestros clientes. Crean un archivo de configuración personalizado, ejecutan este script y terminan con un MST y un CAB que sobrescribirán el valor predeterminado incluido en el MSI base.

Originalmente solo les dimos a los clientes instrucciones para usar Orca, pero eso realmente solo les permite actualizar propiedades / valores: si necesita reemplazar un archivo de configuración, entonces resulta un poco complicado para la mayoría del personal de TI a menos que tengan acceso a WISE, InstallShield o similar.

Option Explicit

Const MSI_SRC = "myapp.msi"
Const MSI_TEMP = "temp.msi"
Const MST_FILE = "custom.mst"
Const MY_CONFIG = "customsettings.reg"
Const CAB_FILE = "config.cab"

Dim filesys 
Set filesys=CreateObject("Scripting.FileSystemObject")

If filesys.FileExists(MSI_SRC) Then
   filesys.CopyFile MSI_SRC, MSI_TEMP
Else
    MsgBox "Unable to find " & MSI_SRC & "exiting", 48, "Fatal Error"
    Set filesys = Nothing
    WScript.Quit
End If

If filesys.FileExists(MST_FILE) Then
   filesys.DeleteFile(MST_FILE)
End If


Dim installer, database, database2, view

Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase (MSI_TEMP, 1)
Set database2 = installer.OpenDatabase (MSI_SRC, 1)

If filesys.FileExists(MY_CONFIG) Then
    Dim objFile, size, result, seq, objCab
    Set objCab = CreateObject("MakeCab.MakeCab.1")
    objCab.CreateCab CAB_FILE, False, False, False
    objCab.AddFile MY_CONFIG, filesys.GetFileName(MY_CONFIG)
    objCab.CloseCab

    Set objFile = filesys.GetFile(MY_CONFIG)
    size = objFile.Size

    Set view = database.OpenView ("SELECT LastSequence FROM Media WHERE DiskId = 1")
    view.Execute
    Set result = view.Fetch
    seq = result.StringData(1) + 1 ' Sequence for new configuration file

    Set view = database.OpenView ("INSERT INTO Media (DiskId, LastSequence, Cabinet) VALUES ('2', '" & seq & "', '" & CAB_FILE & "')")
    view.Execute

    Set view = database.OpenView ("UPDATE File SET FileSize = " & size & ", Sequence = " & seq & ", FileName = 'CUSTOM~2.REG|customsettings.reg' WHERE File = '" & LCase(MY_CONFIG) & "'")
    view.Execute
End If


database.GenerateTransform database2, MST_FILE
database.CreateTransformSummaryInfo database2, MST_FILE, 0, 0

' Cleanup
Set database = Nothing
Set database2 = Nothing
Set installer = Nothing
Set view = Nothing

filesys.DeleteFile(MSI_TEMP)
Set filesys = Nothing
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top