1

Wix を使用して Msi を作成しました。各 Msi には、Appserver 機能、Webserver 機能、DB サーバー機能などの 1 つまたは 2 つまたは 3 つの機能があります。

ここで、各機能で提示される構成ファイルのリストを取得するように求められました。

wxs ファイルから各機能に関連付けられている web.config ファイルのリストを見つけるのは困難です。

特定の検索パターンを持つ機能に関連付けられたファイルのリストを見つけることは可能ですか?

例のために。Appserver 機能にパックされたすべての web.config ファイルを見つけます。

リストを取得する簡単な方法 (クエリまたは powershell などの他の自動スクリプト) はありますか?

4

2 に答える 2

1

Wix には、DTF (「展開ツール基盤」) と呼ばれる .NET SDK が付属しています。msi.dllとりわけウィンドウをラップします。これらの .NETMicrosoft.Deployment.*.dllアセンブリは、Wix Toolset インストール ディレクトリの SDK サブディレクトリにあります。ドキュメントはdoc サブディレクトリにdtf.chmあります。dtfapi.chm

ドキュメントに示されているように、この SDK を使用して、SQL で msi データベースにクエリを実行するコードを記述できます。FeatureFeatureComponents、およびFileテーブルに興味があるでしょう。

以前に 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 に答える