Je ne pouvais pas trouver un moyen de faire cela dans WIX, j'ai donc eu recours à une action personnalisée. J'avais écrit tous mes custom actions in Javascript. Je trouve que Javascript est facile à utiliser et robuste à cette fin, despite what others have said.
Mais je ne pouvais pas trouver un moyen d'ajouter un script depuis JavaScript, car la mise à jour de métabase IIS nécessite l'utilisation d'un type de données VBArray, qui est supporté dans VBScript, mais pas en Javascript. Oups. Donc, voici le code, dans 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
Voici le code WIX:
<Fragment>
<CustomAction Id="CA.AddExtension"
BinaryKey="B.VBScript"
VBScriptCall="AddExtension_CA"
Execute="immediate"
Return="check" />
....
Voir aussi:
AddExtensionFile.