Windows installer 如何生成mst文件作为2个msi文件的差异
我试图在对msi文件进行更改后生成mst文件。我的方法是这样的Windows installer 如何生成mst文件作为2个msi文件的差异,windows-installer,Windows Installer,我试图在对msi文件进行更改后生成mst文件。我的方法是这样的 获取原始.msi文件的副本 在msi文件副本中进行所有修改 现在我有2个msi文件original.msi和modified.msi。是否有任何方法可以通过取modified.msi-original.msi的差值来生成.mst文件。我发现installshield MsiDiff.exe的这个命令行工具可以在日志文件中生成差异。是否有方法根据差异生成mst文件 "C:\Program Files\InstallShield\201
"C:\Program Files\InstallShield\2014\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
从两个数据库生成转换的Windows Installer实用程序
'用于Windows脚本主机、CScript.exe或WScript.exe
"版权所有(c)微软公司。版权所有。
'演示Database.GenerateTransform和MsiDatabaseGenerateTransform的使用
'
选项显式
Const MSIopenDatabaseModerReadOnly=0
Const msiOpenDatabaseModeTransact=1
Const msiOpenDatabaseModeCreate=3
如果Wscript.Arguments.Count<2,则
Echo“Windows Installer数据库转换生成实用程序”&_
vbNewLine&“第一个参数是原始安装程序数据库的路径”&_
vbNewLine&“第二个参数是更新的安装程序数据库的路径”&_
vbNewLine&“第三个参数是要生成的转换文件的路径”&_
vbNewLine&“如果省略第三个参数,则仅比较数据库”&_
vbNewLine&_
vbNewLine&“版权所有(C)Microsoft Corporation。保留所有权利。”
Wscript.Quit 1
如果结束
'连接到Windows Installer对象
出错时继续下一步
Dim安装程序:设置安装程序=无
Set installer=Wscript.CreateObject(“WindowsInstaller.installer”):检查错误
'打开数据库并生成转换
Dim database1:Set-database1=installer.OpenDatabase(Wscript.Arguments(0),MSIOpenDatabaseModerReadOnly):检查错误
Dim database2:Set database2=installer.OpenDatabase(Wscript.Arguments(1),MSIOpenDatabaseModerReadOnly):检查错误
Dim transform:transform=“”如果没有提供输出转换文件,只需进行比较即可
如果Wscript.Arguments.Count>=3,则transform=Wscript.Arguments(2)
Dim different:different=Database2.GenerateTransform(Database1,transform):检查错误
如果不不同,则Wscript.Echo“数据库相同”;如果transform=Empty,则Wscript.Echo“数据库不同”
子校验错误
暗消息,errRec
如果Err=0,则退出Sub
message=Err.Source&“&Hex(Err)&”:“&Err.Description
如果不是,那么安装程序什么都不是
设置errRec=installer.LastErrorRecord
如果Not errRec为Nothing,则message=message&vbNewLine&errRec.FormatText
如果结束
Echo消息
Wscript.Quit 2
端接头
该脚本有3个参数:原始数据库、更新数据库,最后第3个是mst完整路径是脚本名wigenxfm.vbsyes,它是这样一个:“wigenxfm.vbs-从两个数据库生成转换,或比较它们”我使用该vbs有一个问题。我可以得到不同。但是在生成的mst中未反映udated msi中摘要信息的所有更改。此处的同一问题WiGenXfm.vbs适用于所有其他更改,但在摘要信息中,我正在做的任何更改均未反映在mst中。。还有其他选择吗@梅利亚特