2013-03-19 107 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