1

WebApplicationExtension要素を見てきましたが、WebApplicationの子である必要があるため、新しいWebApplicationを作成する必要があるようです。私はそれを望んでいません。

既存のWebサイトに拡張機能(またはスクリプトマップ)を作成したい。アンインストール時に、Webサイトは残りますが、拡張機能(スクリプトマップエントリ)は削除する必要があります。

誰もがWIXでこれを行う方法を知っていますか?


良い答えが得られない場合は、InstallFinalizeの前にスクリプト内でそれを行う必要があると思います。

4

1 に答える 1

1

WIXでこれを行う方法がわからなかったので、カスタムアクションに頼りました。私はすべてのカスタムアクションをJavascriptで書いていました。他の人が言っていることにもかかわらず、Javascriptはその目的のために使いやすく、堅牢であることがわかりました。

しかし、IISメタベースの更新ではVBScriptではサポートされているがJavascriptではサポートされていないVBArrayデータ型を使用する必要があるため、Javascriptからスクリプトマップを追加する方法を見つけることができませんでした。おっと。

それで、これがVBScriptのコードです。

Function AddExtension_CA()

    VBSLogMessage("AddExtension_CA() ENTRY")
    Dim iis
    Set iis = GetObject("winmgmts://localhost/root/MicrosoftIISv2")

    dim siteName
    siteName = Session.Property("WEBSITE_NAME")

    VBSLogMessage "website name(" & siteName & ")"

    If (siteName <> "") Then
        Dim idir, dll
        idir = Session.Property("INSTALLDIR")
        dll = idir & "\MyIsapiExtension.dll"

        Dim query
        If (siteName <> "W3SVC") Then
            query = "SELECT * FROM IIsWebServerSetting WHERE Name = '" & siteName & "'"
        Else
            query = "SELECT * FROM IIsWebServiceSetting"
        End If

        Set results = iis.ExecQuery(query)
        Dim newMaps()   '' dynamically-sized Array

        '' two passes
        For t = 0 to 1
            Dim c
            c=0
            For Each item in results
                '' in pass 1, count them. 
                '' in pass 2, copy them.
                For i = 0 to Ubound(item.ScriptMaps)
                    If UCase(item.ScriptMaps(i).Extensions) <> ".IIRF" Then
                        If t = 1 Then
                            Set newMaps(c) = item.ScriptMaps(i)
                        End if
                        c = c+1
                    End If
                Next

                If t = 0 Then
                    ReDim Preserve newMaps(c)
                Else
                    VBSLogMessage("setting new filter")

                    Set newMaps(c) = iis.get("ScriptMap").SpawnInstance_()
                    newMaps(c).Extensions = ".iirf"
                    newMaps(c).ScriptProcessor= dll
                    newMaps(c).Flags = "1"
                    newMaps(c).IncludedVerbs = "GET,POST"
                    item.ScriptMaps = newMaps
                    item.Put_()
                End If
            Next
        Next

        VBSLogMessage("Allowing the DLL as an Extension")

        dim IIsWebServiceObj
        Set IIsWebServiceObj = GetObject("IIS://localhost/W3SVC")
        IIsWebServiceObj.AddExtensionFile dll, True, "GroupId", True, "Description of the Extension"
        Set IIsWebServiceObj = Nothing

    End If

    Set iis = Nothing

    VBSLogMessage("AddExtension_CA() EXIT")

    AddExtension_CA = 1   ' MsiActionStatus.Ok

End Function

WIXコードは次のとおりです。

<Fragment>
    <CustomAction Id="CA.AddExtension"
              BinaryKey="B.VBScript"
              VBScriptCall="AddExtension_CA"
              Execute="immediate"
              Return="check" />

    ....


AddExtensionFileも参照してください。

于 2010-02-05T15:02:00.053 に答える