2013-03-19 19 views
6

Voglio creare una cartella nell'unità C e quindi creare alcune sottocartelle all'interno di tale cartella nel programma di installazione di wix. Ma queste cartelle non sono correlate con la cartella installata. . Il mio programma vuole installarsi all'interno della cartella AServiceSetup ... ma voglio creare una cartella 'PTLogFile' all'interno dell'unità C e poi voglio creare delle sottocartelle all'interno di quella cartella. Si prega di qualcuno mi aiuti a correggere il mio code.Following è il mio codiceCreare cartelle 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>     

risposta

11

Grazie per le risposte. Ho avuto la risposta dalle risposte di cui sopra struttura di directory come segue

<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> 

E Componente come segue

<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> 

e questo riferimento dei componenti all'interno della caratteristica del prodotto come segue

<ComponentRef Id="CreateLogFolders"/> 

Infine aggiungere una proprietà all'interno del prodotto come segue

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

Mentre è stata definita una struttura di directory, il programma di installazione è solo andare a creare le directory che sono richiesti dai componenti.

Una soluzione semplice è quella di aggiungere un componente come la seguente:

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

e riferimento questo componente in una delle vostre caratteristiche.

+0

grazie per la tua risposta rapida ... Ma ho ricevuto un errore come segue. Errore ICE18: KeyPath per componente: "CreateLogFolders" è Directory: "PTLogFile". La coppia Directory/Component deve essere elencata nella tabella CreateFolders. – Programmer

+0

Ah sì, aggiornato sopra. – ChrisPatrick

+0

Ancora ho lo stesso errore rimanente. Si prega di fare riferimento i codici seguenti e mi aiuta ... Programmer

1

Preferisci posizionare ogni elemento <CreateFolder>, che restituisce un record a CreateFolder table, nel proprio componente. In caso contrario, io non sono sicuro che questo è conforme bene con component rules ...

Lascia la struttura di directory come segue:

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

e autore del componente in modo simile a questo:

<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

Non credo che questo sia un problema in questo caso, dal momento che sono solo cartelle e non risorse reali. È un caso tutto-o-niente dove sono semanticamente una cosa. – ChrisPatrick

+0

Tranne le regole dei componenti direi che la creazione della cartella dovrebbe essere spedita per sempre con quella raccolta di componenti. Non è possibile aggiungere o rimuovere (rimuovere probabilmente è più limitante) il set dal componente. Le cartelle sono risorse quando vengono create direttamente. –

+0

Punto giusto, anche se ancora non so quanto sia probabile che sia necessario apportare questa modifica ... – ChrisPatrick