我正在使用Wix 3.6来创建设置。我一直在学习。那里的信息仍然散落在周围。我只是在等待我的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>
如何使用Wix执行此操作?
答案 0 :(得分:4)
第一步是创建一个设置为所需值的属性:
<Product>
<Property Id="LOGFOLDER" Value="D:\Logs" />
</Product>
第二步是创建一个对话框,在其中设置此属性(或另一件事来更改其值):
<Dialog>
<Control Id="Edit_LogFolder" Type="Edit" Property="LOGFOLDER" />
</Dialog>
然后,您需要更改目录结构以在默认位置创建此文件夹:
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="MyApp">
<Directory Id="LOGFOLDER" Name="Logs" />
</Directory>
</Directory>
最后一步是创建一个将创建目录的Component,如下所示:
<ComponentGroup Id="ComponentGroup_LogFolder">
<Component Id="Component_LogFolder" Guid="" Directory="LOGFOLDER">
<CreateFolder Directory="LOGFOLDER" />
</Component>
</ComponentGroup>
<强>注:强>
如果D:\是光盘驱动器并且您插入了光盘,则安装将失败,因为它将尝试创建该文件夹,但不会成功。
答案 1 :(得分:1)
Name属性不是formattable,因此您可以使用其中的属性。 Id'LogFolderDir'没有父节目,例如“ProgramFilesFolder”,因此它默认为具有最大磁盘空间量的卷。在这种情况下,D但是YMMV。
默认为D是危险的:因为D:可能不存在。我如何设置此目录是Id =“LOGDIR”Name =“Logs”并使其成为INSTALLDIR / INSTALLLOCATION目录元素的子项。然后在您的自定义UI中,连接另一个BrowseFolder对话框,以便用户可以覆盖它。或者,将其与所需的日志功能相关联,以便可以使用库存特征选择对话框选择要素并浏览目标文件夹。
如果您仍然希望它“默认”为D:\ Logs我要做的是有一个自定义操作,检查D:是否存在并且是固定磁盘。如果是这样,请设置LOGDIR = D:\ Logs
答案 2 :(得分:0)
通过对属性和目录使用相同的ID(无需命名目录),可以找到一种更简单的解决方案。但是,您必须在属性中使用文件夹的完整路径。
比方说,日志目录为C:\ ProgramDirectory \ Data \ Log,并且您想为Data设置一个属性(通常,如果Data的值不同并且有条件地设置)。
<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>