Windows installer 如何生成mst文件作为2个msi文件的差异

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

我试图在对msi文件进行更改后生成mst文件。我的方法是这样的

  • 获取原始.msi文件的副本
  • 在msi文件副本中进行所有修改
  • 现在我有2个msi文件original.msi和modified.msi。是否有任何方法可以通过取modified.msi-original.msi的差值来生成.mst文件。我发现installshield MsiDiff.exe的这个命令行工具可以在日志文件中生成差异。是否有方法根据差异生成mst文件

    "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中。。还有其他选择吗@梅利亚特