2009-03-05 9 views
-1

Nous développons un produit distribué par nos clients à leurs clients. Nous devons autoriser l'administrateur de l'entreprise cliente à apporter des modifications de configuration au programme d'installation avant de l'envoyer à l'utilisateur final. Les changements de configuration dans ce cas signifie que quelques entrées de registre doivent être faites sur l'ordinateur des utilisateurs finaux. Comment puis-je faire cela?Configuration du programme d'installation avant la distribution

Répondre

2

Voici un exemple de script que nous envoyons à nos clients. Ils créent un fichier de configuration personnalisé, exécutent ce script et se retrouvent avec un MST et un CAB qui écraseront les paramètres par défaut inclus dans le MSI de base. A l'origine, nous donnions simplement aux clients des instructions sur l'utilisation d'Orca, mais cela leur permettait seulement de mettre à jour les propriétés/valeurs - si vous devez remplacer un fichier de configuration, cela finit un peu compliqué pour la plupart des informaticiens. à WISE, InstallShield ou similaire.

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 
+0

Salut sascha: La solution de script que vous avez affichée est exactement ce que je cherchais. J'ai eu votre script pour courir sans erreurs et la date modifiée sur le msi a été mise à jour. J'ai essayé de modifier deux fichiers différents. 1) logo2.gif lorsque j'ai exécuté le programme d'installation, j'ai eu des erreurs: "Le programme d'installation a rencontré une erreur inattendue lors de l'installation de ce paquet, ce qui peut indiquer un problème avec ce paquet. Ensuite, "Retour du serveur, valeur de retour: 110". Puis j'ai essayé et fichier de configuration ASICI. Après cela, j'ai pu installer sans erreurs ... mais le fichier qui a été installé n'était pas celui mis à jour :( – blak3r

Questions connexes