如何生成 mst 文件作为 2 个 msi 文件的差异
how to generate mst file as difference of 2 msi files
我试图在对 msi 文件进行更改后生成 mst 文件。我的做法是这样的。
- 复制原始 .msi 文件。
- 在 msi 文件副本中进行所有修改。
现在我有 2 个 msi 文件 original.msi 和 modified.msi。有什么方法可以通过取 modified.msi-original.msi 的差异来生成 .mst 文件。我发现 installshield MsiDiff.exe 这个命令行工具在日志中生成差异 file.Is 有一种方法可以根据差异生成 mst 文件。
"C:\Program Files\InstallShield14\System\MsiDiff.exe" "C:\InstallShield 2014 Projects\MyProject1.msi" "C:\InstallShield 2014 Projects\MyProject2.msi" /out "C:\Log File.xml"
我正在寻找一个命令行工具,它以 'orig.msi' 和 'modified.msi' 作为输入,并且可以将差异生成为 mst 文件。
从 windows sdk 你得到这个 vbs :
' 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
脚本有 3 个参数:原始数据库、更新数据库,最后第三个是 mst 完整路径
我试图在对 msi 文件进行更改后生成 mst 文件。我的做法是这样的。
- 复制原始 .msi 文件。
- 在 msi 文件副本中进行所有修改。
现在我有 2 个 msi 文件 original.msi 和 modified.msi。有什么方法可以通过取 modified.msi-original.msi 的差异来生成 .mst 文件。我发现 installshield MsiDiff.exe 这个命令行工具在日志中生成差异 file.Is 有一种方法可以根据差异生成 mst 文件。
"C:\Program Files\InstallShield14\System\MsiDiff.exe" "C:\InstallShield 2014 Projects\MyProject1.msi" "C:\InstallShield 2014 Projects\MyProject2.msi" /out "C:\Log File.xml"
我正在寻找一个命令行工具,它以 'orig.msi' 和 'modified.msi' 作为输入,并且可以将差异生成为 mst 文件。
从 windows sdk 你得到这个 vbs :
' 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
脚本有 3 个参数:原始数据库、更新数据库,最后第三个是 mst 完整路径