在Wix中创建文件夹

6

我想在C盘中创建一个文件夹,然后在wix安装程序中在该文件夹内创建一些子文件夹。但是这些文件夹与已安装的文件夹无关。我的程序要安装在AServiceSetup文件夹内......但我想在C盘中创建一个'PTLogFile'文件夹,然后想在该文件夹中创建一些子文件夹。请任何人帮助我纠正我的代码。以下是我的代码:

    <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>                 
3个回答

13
感谢您的回复。我从上面的回复中得到了答案。 目录结构如下。
 <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>

并在您的功能之一中引用此组件。


谢谢您的快速回复...但是我收到了以下错误。 错误1 ICE18:Component的KeyPath:“CreateLogFolders”是目录:“PTLogFile”。 目录/组件对必须在CreateFolders表中列出。 - Programmer
我仍然有相同的错误。请参考下面的代码并帮助我...</Component><Component Id="CreateLogFolders" Directory="PTLogFile" Guid="2F15F916-2EEF-4F62-AE23-BC2882A9E12E"> <CreateFolder Directory="Backups" /> <CreateFolder Directory="CommandLog" /> <CreateFolder Directory="EventLog" /> <CreateFolder Directory="Responds" /> </Component> </ComponentGroup> </Fragment> - Programmer
你需要在组件内添加 <CreateFolder Directory="PTLogFile" />。 - ChrisPatrick
嗨...抱歉我的愚蠢错误,但它仍然无法在C盘创建文件夹。 - Programmer
嗨..这对我很紧急。你能尽快回复吗? - Programmer

1
你最好将每个<CreateFolder>元素放置在自己的组件中,这会导致生成CreateFolder表的记录。否则,我不确定这是否符合组件规则...
保留目录结构如下:
<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>

我不认为这在这种情况下是个问题,因为它们只是文件夹,而不是实际的资源。从语义上讲,它们是一个整体或者什么都不是。 - ChrisPatrick
除了组件规则会说文件夹的创建必须永久与该组件集合一起提供。您无法从组件中添加或删除(删除可能更加限制)该集合。直接创建时,文件夹是资源。 - Rob Mensching
公正的观点,尽管我仍然不知道需要进行这种更改的可能性有多大... - ChrisPatrick
嗨,谢谢您的回复。我想和您澄清一件事,那就是...我想把所有的设置dll文件放在C:/Program/files/AServiceSetup文件夹中。但是我想要另一个文件夹目录来保存我的日志详细信息,即C:/PTLogFile。在这个PTLogFile文件夹里...我想创建四个文件夹,如我上面所提到的。 - Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接