47 lines
2.1 KiB
Plaintext
47 lines
2.1 KiB
Plaintext
' Windows Installer utility to generate a transform from two databases
|
|
' For use with Windows Scripting Host, CScript.exe or WScript.exe
|
|
' Copyright (c) Microsoft Corporation. All rights reserved.
|
|
' Demonstrates use of Database.GenerateTransform and MsiDatabaseGenerateTransform
|
|
'
|
|
Option Explicit
|
|
|
|
Const msiOpenDatabaseModeReadOnly = 0
|
|
Const msiOpenDatabaseModeTransact = 1
|
|
Const msiOpenDatabaseModeCreate = 3
|
|
|
|
If Wscript.Arguments.Count < 2 Then
|
|
Wscript.Echo "Windows Installer database tranform generation utility" &_
|
|
vbNewLine & " 1st argument is the path to the original installer database" &_
|
|
vbNewLine & " 2nd argument is the path to the updated installer database" &_
|
|
vbNewLine & " 3rd argument is the path to the transform file to generate" &_
|
|
vbNewLine & " If the 3rd argument is omitted, the databases are only compared" &_
|
|
vbNewLine &_
|
|
vbNewLine & "Copyright (C) Microsoft Corporation. All rights reserved."
|
|
Wscript.Quit 1
|
|
End If
|
|
|
|
' Connect to Windows Installer object
|
|
On Error Resume Next
|
|
Dim installer : Set installer = Nothing
|
|
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") : CheckError
|
|
|
|
' Open databases and generate transform
|
|
Dim database1 : Set database1 = installer.OpenDatabase(Wscript.Arguments(0), msiOpenDatabaseModeReadOnly) : CheckError
|
|
Dim database2 : Set database2 = installer.OpenDatabase(Wscript.Arguments(1), msiOpenDatabaseModeReadOnly) : CheckError
|
|
Dim transform:transform = "" 'Simply compare if no output transform file supplied
|
|
If Wscript.Arguments.Count >= 3 Then transform = Wscript.Arguments(2)
|
|
Dim different:different = Database2.GenerateTransform(Database1, transform) : CheckError
|
|
If Not different Then Wscript.Echo "Databases are identical" Else If transform = Empty Then Wscript.Echo "Databases are different"
|
|
|
|
Sub CheckError
|
|
Dim message, errRec
|
|
If Err = 0 Then Exit Sub
|
|
message = Err.Source & " " & Hex(Err) & ": " & Err.Description
|
|
If Not installer Is Nothing Then
|
|
Set errRec = installer.LastErrorRecord
|
|
If Not errRec Is Nothing Then message = message & vbNewLine & errRec.FormatText
|
|
End If
|
|
Wscript.Echo message
|
|
Wscript.Quit 2
|
|
End Sub
|