2013-03-19 70 views
6

我想在C盤創建一個文件夾,然後在wix安裝程序中的該文件夾內創建一些子文件夾。但是這些文件夾與已安裝的文件夾無關。 。我的程序想要安裝在AServiceSetup文件夾內......但是我想在C盤中創建一個'PTLogFile'文件夾,然後在該文件夾內創建一些子文件夾。請任何一個可以幫助我糾正我的code.Following是我的代碼在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>     

回答

11

謝謝你的回覆。我從上面的回覆 目錄結構的回答如下

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

和組件如下

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

和產品的特徵內部此組件參考如下

<ComponentRef Id="CreateLogFolders"/> 

最後在產品內部添加屬性如下

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

雖然你已經定義了一個目錄結構,安裝程序只會創建由組件所需的目錄。

一個簡單的方法是添加一個組件如下所示:

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

,並參考在你的特點之一此組件。

+0

感謝您的快速回復......但我得到了一個錯誤如下。錯誤 ICE18:組件的KeyPath:'CreateLogFolders'是目錄:'PTLogFile'。目錄/組件對必須列在CreateFolders表中。 – Programmer 2013-03-19 11:22:22

+0

啊,是的,已在上面更新。 – ChrisPatrick 2013-03-19 11:32:50

+0

我仍然有同樣的錯誤。請參閱下面的代碼並幫助我... Programmer 2013-03-19 12:09:05

1

您寧願將每個<CreateFolder>元素放在其自己的組件中,以產生CreateFolder table的記錄。否則,我不知道該用component rules符合嗯......

保留目錄結構如下:

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

和作者的方式與此類似組件:

<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

我不認爲這是一個問題在這種情況下,因爲他們只是文件夾,而不是實際的資源。這是一個全語或無語的情況,它們在語義上是一回事。 – ChrisPatrick 2013-03-19 12:36:41

+0

除組件規則會說該文件夾的創建將永遠不得不與該組件集合一起提供。您無法從組件中添加或刪除(可能更有限制)集。文件夾是直接創建時的資源。 – 2013-03-19 13:58:40

+0

公平點,雖然我仍然不知道有多大可能會需要做出改變... – ChrisPatrick 2013-03-19 17:26:43

相關問題