2013-03-19 21 views
6

Ich möchte einen Ordner in C-Laufwerk erstellen und erstellen Sie dann einige Unterordner in diesem Ordner im WIX-Installationsprogramm. Diese Ordner sind jedoch nicht mit dem installierten Ordner verknüpft. . Mein Programm möchte im AServiceSetup-Ordner installiert werden ... aber ich möchte einen "PTLogFile" -Ordner innerhalb des C-Laufwerks erstellen und dann einige Unterordner in diesem Ordner erstellen. Bitte jemand mir helfen, meinen code.Following zu korrigieren ist mein CodeErstellen Sie Ordner in Wix

<Directory Id="TARGETDIR" Name="SourceDir"> 

    <Directory Id="PTLogFile" Name="PTLogFile"> 
    <Directory Id="Backups" Name="Backups"/> 
    <Directory Id="CommandLog" Name="CommandLog"/> 
    <Directory Id="EventLog" Name="EventLog"/> 
    <Directory Id="Responds" Name="Responds"/> 
    </Directory> 
     <Directory Id="ProgramFilesFolder"> 
      <Directory Id="INSTALLFOLDER" Name="AServiceSetup"> 
     </Directory> 
     </Directory> 

    </Directory> 
</Fragment>     

Antwort

11

Vielen Dank für Ihre Antworten. Ich habe die Antwort von den oben genannten Antworten Struktur Directory als

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="LogFile" Name="LogFile"> 
    <Directory Id="Logs" Name="Logs"> 
     <Directory Id="Log1" Name="Log1"/> 
     <Directory Id="Log2" Name="Log2"/> 
     <Directory Id="Log3" Name="Log3"/> 
     <Directory Id="Log4" Name="Log4"/> 
    </Directory> 
    </Directory> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="INSTALLFOLDER" Name="AServiceSetup"> 
    </Directory> 
    </Directory> 
</Directory> 

und Komponenten folgt wie

folgt
<Component Id="CreateLogFolders" Guid="....." Directory="LogFile" > 
    <CreateFolder Directory="LogFile" /> 
    <CreateFolder Directory="Logs"/> 
    <CreateFolder Directory="Log1"/> 
    <CreateFolder Directory="Log2"/> 
    <CreateFolder Directory="Log3"/> 
    <CreateFolder Directory="Log4"/> 
</Component> 

und diese Komponente Referenz innerhalb der Funktion des Produkts wie folgt

<ComponentRef Id="CreateLogFolders"/> 

Schließlich fügen Sie wie folgt eine Eigenschaft in das Produkt ein:

<Property Id="LogFile" Value="C:" /> 
4

Während Sie eine Verzeichnisstruktur definiert hat, wird das Installationsprogramm nur gehen Verzeichnisse zu erstellen, die von Komponenten erforderlich ist.

Eine einfache Möglichkeit ist, eine Komponente wie folgt hinzuzufügen: diese Komponente

<Component Id="CreateLogFolders" Directory="PTLogFile"> 
    <CreateFolder Directory="PTLogFile" /> 
    <CreateFolder Directory="Backups" /> 
    <CreateFolder Directory="CommandLog" /> 
    <CreateFolder Directory="EventLog" /> 
    <CreateFolder Directory="Responds" /> 
</Component> 

und Referenz in einem Ihrer Funktionen.

+0

Vielen Dank für Ihre schnelle Antwort ... Aber ich habe einen Fehler wie folgt. Fehler ICE18: KeyPath für Komponente: 'CreateLogFolders' ist Directory: 'PTLogFile'. Das Verzeichnis/Komponentenpaar muss in der CreateFolders-Tabelle aufgeführt sein. – Programmer

+0

Ah ja, oben aktualisiert. – ChrisPatrick

+0

Immer noch habe ich den gleichen Fehler übrig. Bitte beziehen Sie sich auf die folgenden Codes und helfen Sie mir ... Programmer

1

Sie würden lieber jedes <CreateFolder> Element, das zu einem Datensatz zu CreateFolder table führt, in einer eigenen Komponente platzieren. Ansonsten bin ich nicht sicher, ob dies gut mit component rules erfüllt ...

die Verzeichnisstruktur Lassen Sie wie folgt vor:

<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="PTLogFile" Name="PTLogFile" /> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="INSTALLFOLDER" Name="AServiceSetup"> 
    </Directory> 
</Directory> 

Und die Komponente in der Art und Weise ähnlich zu diesem Autor:

<DirectoryRef Id="PTLogFile"> 
    <Directory Id="Backups"> 
    <Component Id="..." Guid="..."> 
     <CreateFolder /> 
    </Component> 
    </Directory> 
    <Directory Id="CommandLog"> 
    <Component Id="..." Guid="..."> 
     <CreateFolder /> 
    </Component> 
    </Directory> 
    <Directory Id="EventLog"> 
    <Component Id="..." Guid="..."> 
     <CreateFolder /> 
    </Component> 
    </Directory> 
    <Directory Id="Responds"> 
    <Component Id="..." Guid="..."> 
     <CreateFolder /> 
    </Component> 
    </Directory> 
</DirectoryRef> 
+0

Ich glaube nicht, dass das ein Problem in diesem Fall ist, da sie nur Ordner und keine tatsächlichen Ressourcen sind. Es ist ein Alles-oder-Nichts-Fall, in dem sie semantisch eine Sache sind. – ChrisPatrick

+0

Außer Component Rules würde sagen, dass die Ordnererstellung für immer mit dieser Sammlung von Komponenten ausgeliefert werden muss. Sie konnten die Menge aus der Komponente nicht hinzufügen oder entfernen (wahrscheinlich ist die Begrenzung einschränkend). Ordner sind Ressourcen, wenn sie direkt erstellt werden. –

+0

Fairer Punkt, obwohl ich immer noch nicht weiß, wie wahrscheinlich es wäre, diese Änderung vornehmen zu müssen ... – ChrisPatrick

Verwandte Themen