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