2016-01-21 26 views
1

我試圖在更改msi文件後生成一個mst文件。我的方法就是這樣。如何生成mst文件差異爲2個msi文件

  1. 取出原始.msi文件的副本。
  2. 在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文件。

回答

2

從Windows SDK的u得到這個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 FULLPATH

+0

是腳本的名稱wigenxfm.vbs –

+1

是的,它的這一個:「WiGenXfm.vbs - 從兩個數據庫生成轉換,或比較它們」 – Meliart

+1

我有一個問題使用這個vbs。我能夠得到不同的結果。但是,在msd中彙總信息的所有更改都未反映在生成的mst中。 –