2009-03-05 6 views
-1

Wir entwickeln ein Produkt, das von unseren Kunden an ihre Kunden vertrieben wird. Wir müssen dem Administrator des Client-Unternehmens erlauben, Konfigurationsänderungen am Installationsprogramm vorzunehmen, bevor er sie an den Endbenutzer sendet. Konfigurationsänderungen bedeuten in diesem Fall, dass einige Registrierungseinträge auf dem Computer des Endbenutzers vorgenommen werden. Wie mache ich das?Konfiguration des Installationsprogramms vor der Verteilung

Antwort

2

Hier ist ein Beispielskript, das wir unseren Kunden auszusenden. Sie erstellen eine benutzerdefinierte Konfigurationsdatei, führen dieses Skript aus und enden mit einer MST und einem CAB, die den Standard überschreiben, der in der Basis-MSI enthalten ist.

Ursprünglich haben wir den Kunden nur Anweisungen zur Verwendung von Orca gegeben, aber das ermöglicht ihnen nur das Aktualisieren von Eigenschaften/Werten - wenn Sie eine Konfigurationsdatei ersetzen müssen, ist es für die meisten IT-Mitarbeiter etwas kompliziert, es sei denn, sie haben Zugriff zu WISE, InstallShield oder ähnlichem.

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

Hallo Sascha: Die Skriptlösung, die Sie gepostet haben, ist genau das, was ich gesucht habe. Ich habe Ihr Skript ohne Fehler ausgeführt und das Änderungsdatum auf der MSI aktualisiert. Ich habe versucht, zwei verschiedene Dateien zu modifizieren. 1) logo2.gif Als ich das Installationsprogramm ausgeführt habe, sind Fehler aufgetreten: "Das Installationsprogramm hat einen unerwarteten Fehler bei der Installation dieses Pakets festgestellt. Dies könnte auf ein Problem mit diesem Paket hinweisen. Der Fehlercode lautet 2755." Dann "Zurück vom Server. Rückgabewert: 110." Dann habe ich versucht und ASCII-Konfigurationsdatei. Danach konnte ich ohne Fehler installieren ... aber die Datei, die installiert wurde, war nicht die aktualisierte :( – blak3r

Verwandte Themen