2010-09-13 10 views
5

Also ich versuche, eine Webanwendung zu installieren, und ich stolperte über diese Frage: Using WiX to create an IIS virtual directory. Wenn ich versuche, dies für meine eigene App anzupassen, erhalte ich einen Fehler: Installieren einer Webanwendung mit Wix

W:\projectlocation\IssInstallationComponents.wxs(6,0): error LGHT0204: ICE18: KeyPath for Component: 'SiteInstallationComponent' is Directory: 'WEBDIRECTORY'. The Directory/Component pair must be listed in the CreateFolders table.

Ich bin stecken fest versuchen, dies herauszufinden. Hier ist, was ich in der betroffenen Datei habe:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"> 
    <Fragment> 
    <DirectoryRef Id="WEBDIRECTORY"> 
     <Component Id="SiteInstallationComponent" Guid="MY GUID"> 
      <iis:WebVirtualDir Id="ProductVirtualDirectory" Alias="[PRODUCTVERSION]" Directory="WEBDIRECTORY" WebSite="DefaultWebSite"/> 
     </Component> 
    </DirectoryRef> 

    <iis:WebSite Id='DefaultWebSite' Description='Default Web Site' Directory='WEBDIRECTORY'> 
     <iis:WebAddress Id="AllUnassigned" Port="80" /> 
    </iis:WebSite> 
    </Fragment> 
</Wix> 

Ein paar Notizen zu meinem Beispiel. Erstens, ich weiß, dass die GUID falsch ist, ich habe es aus dem obigen Beispiel entfernt, so dass es nicht von Google indexiert und von jemandem wiederverwendet wird, der etwas Ähnliches herausfinden möchte. In meinem Code habe ich eine korrekte GUID. Ich habe auch den Produktnamen in "Produkt" geändert, um jegliche Art von IP-Problemen zu vermeiden.

Irgendwelche Ideen, was ich tun muss, damit dieser Code funktioniert?

+0

Nur ein Hinweis, dass der Wert Guid: 'Guid = "PUT-GUID-HERE"' gültig ist, und zwar für Beispiele – Paddy

Antwort

12

Seufzer

Okay, ging ich durch die interwebs graben und fand die folgenden Threads: http://www.mail-archive.com/[email protected]/msg03483.html

Grundsätzlich muss ich meine Komponente ändern, so dass es wie folgt aussieht:

<Component Id="SiteInstallationComponent" Guid="MY GUID"> 
     <CreateFolder /> 
     <iis:WebVirtualDir Id="ProductVirtualDirectory" Alias="[PRODUCTVERSION]" Directory="WEBDIRECTORY" WebSite="DefaultWebSite"/> 
    </Component> 

Ich liebe Wix, aber manchmal macht es mich verrückt.

+0

teilen Sie das Gefühl :-) – kroonwijk

2

Ich dachte, ich würde ein bisschen dazu hinzufügen. In meinem Fall musste ich eine Konfigurationsdatei als Teil eines Patches mit einer XmlConfig-Aktion ändern. Ich stieß auf das ursprüngliche Problem und versuchte es auch zu umgehen, indem ich einfach ein CreateFolder-Element darin steckte. Aber damit ist es ein Problem. Wenn Ihre Komponente Teil eines Patches ist, wird durch das Einfügen eines CreateFolder-Eintrags dieser in not uninstallable. Das bedeutet, dass Sie den Patch nicht zurücksetzen können.

Was ich am Ende getan habe, war eine andere KeyPath für die Komponente zu erstellen. Ich gab ihm einen Registrierungsschlüssel als KeyPath und es hörte auf, mich über den CreateFolder Eintrag zu belästigen. Dies bedeutet, dass Sie bei der Installation und Deinstallation alles tun, was Sie tun möchten, und verwenden Sie den Registrierungsschlüssel, den Sie angegeben haben, um zu verfolgen, ob die Komponente installiert ist oder nicht.

<RegistryKey Root="HKLM" Key="[REGISTRYKEY]\Settings\[TITLE]" Action="createAndRemoveOnUninstall"> 
    <RegistryValue Action="write" Type="integer" Name="MACHINEMEMORYLIMIT" Value="1" KeyPath="yes"/> 
</RegistryKey> 

(In diesem Fall RegistryKey und TITEL sind zwei Eigenschaften, die wir in den Installateur übergeben wird)

Verwandte Themen