2013-03-19 13 views
6

Chcę utworzyć folder na dysku C, a następnie utworzyć kilka podfolderów w tym folderze w programie instalacyjnym wix. Ale te foldery nie są powiązane z zainstalowanym folderem. . Mój program chce zainstalować w folderze AServiceSetup ... ale chcę utworzyć folder "PTLogFile" na dysku C, a następnie utworzyć kilka podfolderów w tym folderze. Proszę ktoś pomoże mi poprawić moje code.Following jest mój kodUtwórz foldery w 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>     

Odpowiedz

11

Dziękuję za odpowiedzi. Dostałem odpowiedź z powyższych odpowiedziach struktura katalogów następująco

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

i komponent następująco

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

i ten komponent odniesienia wewnątrz funkcji produktu następująco

<ComponentRef Id="CreateLogFolders"/> 

Na koniec dodaj właściwość wewnątrz produktu w następujący sposób:

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

Podczas zdefiniowano strukturę katalogów, instalator będzie tylko do tworzenia katalogów, które są wymagane przez komponenty.

prosta opcja jest dodanie składnika jak następuje:

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

i odniesienie tego składnika w jednej ze swoich funkcji.

+0

dziękuję za szybką odpowiedź ... Ale mam błąd w następujący sposób. Błąd ICE18: KeyPath dla komponentu: "CreateLogFolders" to katalog: "PTLogFile". Para Directory/Component musi być wymieniona w tabeli CreateFolders. – Programmer

+0

Ach tak, zaktualizowane powyżej. – ChrisPatrick

+0

Nadal mam ten sam błąd. Proszę odnieść się do poniższych kodów i pomóc mi ... Programmer

1

Wolisz umieścić każdy element <CreateFolder>, co spowoduje zapis do CreateFolder table, we własnym komponencie. W przeciwnym razie, nie jestem pewien, że to jest zgodne z component rules dobrze ...

Zostaw strukturę katalogów w następujący sposób:

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

i autor komponentu w sposób podobny do tego:

<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

Nie sądzę, że to jest problem w tym przypadku, ponieważ są to tylko foldery, a nie rzeczywiste zasoby. Jest to przypadek "wszystko albo nic", gdzie są one semantycznie jedną rzeczą. – ChrisPatrick

+0

Z wyjątkiem Reguł składowych powiedziałbym, że tworzenie folderów będzie musiało być dostarczane z tą kolekcją Komponentów na zawsze. Nie można dodawać ani usuwać (usuwając prawdopodobnie bardziej ograniczające) zestawu ze składnika. Foldery to zasoby tworzone bezpośrednio. –

+0

Fajne, choć nadal nie wiem, jak prawdopodobnie będzie potrzebna ta zmiana ... – ChrisPatrick