将自定义转换嵌入为子存储

可以将自定义转换存储在 Windows Installer 包的存储中,以保证在安装包可用时转换始终可用。 请参阅嵌入式转换。 Windows Installer SDK 中以实用工具 WiSubStg.vbs 的形式提供了这方面的示例。 以下代码片段 (Emb.vbs) 还说明了如何使用 Storages 表添加嵌入式转换,可与 Windows 脚本宿主配合使用。

'Emb.vbs. Argument(0) is the original database. Argument(1) is the
'    path to the transform file. Argument(2) is the name of the storage.
'
Option Explicit

' Check arguments
If WScript.Arguments.Count < 2 Then
 WScript.Echo "Usage is emb.vbs [original database] [transform] [storage name]"
 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")
 
' Evaluate command-line arguments and set open and update modes
Dim databasePath: databasePath = Wscript.Arguments(0)
Dim importPath  : importPath = Wscript.Arguments(1)
Dim storageName : storageName = Wscript.Arguments(2)
 
' Open database and create a view on the _Storages table
Dim sqlQuery : sqlQuery = "SELECT `Name`,`Data` FROM _Storages"
Dim database : Set database = installer.OpenDatabase(databasePath, 1)
Dim view     : Set view = database.OpenView(sqlQuery)
 
'Create and Insert the row.
Dim record   : Set record = installer.CreateRecord(2)
record.StringData(1) = storageName
view.Execute record
 
'Insert storage - copy data into stream
record.SetStream 2, importPath
view.Modify 3, record
database.Commit
Set view = Nothing
Set database = Nothing

若要将名为 MNPtrans1 的存储添加到 MNP2000.msi,并包含你在将摘要信息添加到自定义转换中创建的转换,请将目录更改为包含 Emb.vbs、原始数据库和转换文件的文件夹,然后输入以下命令行。

Cscript.exe Emb.vbs MNP2000.msi MNPtrans.mst MNPtrans1

这样就完成了自定义转换示例。 在 MNPtrans.mst 中嵌入转换后,该转换始终随安装包一起提供。 文件 MNPtrans.mst 不需要位于源位置就可以应用转换。

从包含示例安装包的文件夹中删除 MNPtrans.mst。 单击 MNP2000.msi 图标以启动安装,或使用以下命令行。

msiexec /i MNP2000.msi

请注意,这将在不使用自定义项的情况下安装产品。 若要使用自定义项进行安装,请输入以下命令行。 使用冒号指示 TRANSFORMS 属性的值是指嵌入式转换。

msiexec /i MNP2000.msi TRANSFORMS=:MNPtrans1

请注意,入口功能不会显示在功能选择树中,即使在用户界面中选择了完整类型的安装,也不会安装入口功能的组件。

下一个示例

小型更新修补示例