2009-11-24 5 views
1

J'ai vu l'élément WebApplicationExtension, mais comme il doit être un enfant de WebApplication, il semble nécessiter la création d'une nouvelle application Web. Je ne veux pas ça.WIX: Comment puis-je enregistrer une nouvelle extension ISAPI ou une nouvelle carte de script sur une application Web ou un site Web existant?

Je souhaite créer l'extension (ou mappe de script) sur un site Web existant. Lors de la désinstallation, le site Web doit rester mais l'extension (entrée de mappe de script) doit être supprimée.

Quelqu'un sait comment faire cela dans WIX?


Si je n'obtiens pas de bonnes réponses, je suppose que je devrais le faire dans le script avant InstallFinalize.

Répondre

1

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.

Questions connexes