1

我们使用 wix 来创建 Msi。每个 Msi 将具有 1 或 2 或 3 个功能,例如 Appserver 功能、Webserver 功能和 DB 服务器功能。

现在我被要求获取每个功能中显示的配置文件列表。

通过 wxs 文件很难找到与每个功能相关的 web.config 文件列表。

是否可以找到与具有特定搜索模式的功能关联的文件列表?

例如。查找 Appserver 功能中打包的所有 web.config 文件。

有什么简单的方法(查询或其他一些自动化脚本,如 powershell)来获取列表?

4

2 回答 2

1

Wix 附带一个称为 DTF(“部署工具基础”)的 .NET SDK。它包裹着窗户msi.dll等等。Microsoft.Deployment.*.dll您可以在 Wix Toolset 安装目录的 SDK 子目录中找到这些 .NET程序集。该文档位于doc 子目录中dtf.chmdtfapi.chm

如文档中所示,您可以使用此 SDK 编写使用 SQL 查询 msi 数据库的代码。您将对FeatureFeatureComponentsFile表感兴趣。

如果您之前没有探索过 MSI 的内部结构,您可以使用orca打开它来感受一下。

于 2012-07-12T11:50:06.947 回答
0

您可以通过对Get-MsiProperties这篇 PowerShell 文章中描述的函数进行轻微修改来完成此操作。

请阅读原文并创建规定的comObject.types.ps1xml文件。

function global:Get-MsiFeatures {
    PARAM (
        [Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,HelpMessage="MSI Database Filename",ValueFromPipeline=$true)]
        [Alias("Filename","Path","Database","Msi")]
        $msiDbName
    )

    # A quick check to see if the file exist
    if(!(Test-Path $msiDbName)){
        throw "Could not find " + $msiDbName
    }

    # Create an empty hashtable to store properties in
    $msiFeatures = @{}

    # Creating WI object and load MSI database
    $wiObject = New-Object -com WindowsInstaller.Installer
    $wiDatabase = $wiObject.InvokeMethod("OpenDatabase", (Resolve-Path $msiDbName).Path, 0)

    # Open the Property-view
    $view = $wiDatabase.InvokeMethod("OpenView", "SELECT * FROM Feature")
    $view.InvokeMethod("Execute")

    # Loop thru the table
    $r = $view.InvokeMethod("Fetch")
    while($r -ne $null) {
        # Add property and value to hash table
        $msiFeatures[$r.InvokeParamProperty("StringData",1)] = $r.InvokeParamProperty("StringData",2)

        # Fetch the next row
        $r = $view.InvokeMethod("Fetch")
    }

    $view.InvokeMethod("Close")

    # Return the hash table
    return $msiFeatures
}
于 2012-07-28T20:02:40.970 回答