Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation Wix安装程序-基于属性创建文件夹层次结构_Installation_Wix - Fatal编程技术网

Installation Wix安装程序-基于属性创建文件夹层次结构

Installation Wix安装程序-基于属性创建文件夹层次结构,installation,wix,Installation,Wix,我正在使用创建一个设置。我仍在继续学习。那里的信息仍然分散在各地。我正在等待我的Wix开发者指南的到来 我目前有一个自定义UI对话框,用户在其中输入一些应用程序配置。该配置的一部分是指定日志文件夹。目前这只是设置了一个属性[LogFolder]。这是默认值,类似于D:\Logs 我希望安装程序在运行安装程序时创建该目录。我有以下几点要尝试,但当我运行安装程序时,它只是在D:驱动器上创建了一个名为[LOGFOLDER]的文件夹 <Product ... <Directory I

我正在使用创建一个设置。我仍在继续学习。那里的信息仍然分散在各地。我正在等待我的Wix开发者指南的到来

我目前有一个自定义UI对话框,用户在其中输入一些应用程序配置。该配置的一部分是指定日志文件夹。目前这只是设置了一个属性[LogFolder]。这是默认值,类似于D:\Logs

我希望安装程序在运行安装程序时创建该目录。我有以下几点要尝试,但当我运行安装程序时,它只是在D:驱动器上创建了一个名为[LOGFOLDER]的文件夹

<Product ...
    <Directory Id="TARGETDIR" Name="SourceDir" >
        <Directory Id="LogFolderDir" Name="[LOGFOLDER]" >
            <Component Id="LogFolderComponent" Guid="{7E7D6916-B321-40D6-ABAD-696B57A6E5FB}" KeyPath="yes">
                <CreateFolder />
            </Component>
        </Directory>
    </Directory>
    ...
</Product>

名称属性不是formattable,因此您可以在其中使用属性。Id“LogFolderDir”没有“ProgramFilesFolder”这样的父级,因此它默认为具有最大磁盘空间的卷。在本例中为D,但为YMMV

默认为D:是危险的,因为D:可能不存在。我如何设置此目录是Id=“LOGDIR”Name=“Logs”并使其成为INSTALLDIR/INSTALLLOCATION目录元素的子元素。然后在自定义UI中,连接另一个BrowseFolder对话框,让用户能够覆盖它。或者,将其与所需的日志功能关联,以便可以使用“库存功能选择”对话框选择该功能并浏览目标文件夹


如果您仍然希望它“默认”为D:\Logs,那么我要做的是执行一个自定义操作,检查D:是否存在并且是否是固定磁盘。如果是这样,请设置LOGDIR=D:\Logs

第一步是将属性集创建为所需的值:

<Product>
  <Property Id="LOGFOLDER" Value="D:\Logs" />
</Product>

第二步是创建一个对话框,在其中设置此属性(或其他更改其值的操作):


然后,您需要更改目录结构以在默认位置创建此文件夹:

<Directory Id="ProgramFilesFolder">
  <Directory Id="INSTALLFOLDER" Name="MyApp">

    <Directory Id="LOGFOLDER" Name="Logs" />

  </Directory>
</Directory>

最后一步是创建将创建目录的组件,如下所示:

<ComponentGroup Id="ComponentGroup_LogFolder">
  <Component Id="Component_LogFolder" Guid="" Directory="LOGFOLDER">

    <CreateFolder Directory="LOGFOLDER" />

  </Component>
</ComponentGroup>

备注:


如果D:\是一个光盘驱动器,并且您插入了一张光盘,安装将失败,因为它将尝试创建文件夹,但安装不会成功。

有一个更简单的解决方案,即对属性和目录使用相同的ID(不命名目录)。但必须使用属性中文件夹的完整路径

假设日志目录为C:\ProgramDirectory\Data\log,您希望使用属性设置数据(通常是在数据值不同且有条件设置的情况下)


仅以D:\为例。对不起,我的错。谢谢你,我会试试的。
<ComponentGroup Id="ComponentGroup_LogFolder">
  <Component Id="Component_LogFolder" Guid="" Directory="LOGFOLDER">

    <CreateFolder Directory="LOGFOLDER" />

  </Component>
</ComponentGroup>
<Property Id="PR_DATA_DIRECTORY" Value="C:\ProgramDirectory\Data" />
<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="DIR_PROGRAM" Name="C:\ProgramDirectory" >
        <Directory Id="PR_DATA_DIRECTORY">
            <Directory Id="DIR_LOG" Name="Log" />
        <Directory/>
    </Directory>
</Directory>