3

我正在使用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 做到这一点?

4

3 回答 3

5

第一步是创建一个设置为您想要的值的属性:

<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>

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

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

    <CreateFolder Directory="LOGFOLDER" />

  </Component>
</ComponentGroup>

评论:

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

于 2014-01-16T12:33:08.000 回答
1

Name 属性不可格式化,因此您可以在其中使用属性。Id 'LogFolderDir' 没有诸如“ProgramFilesFolder”之类的父级,因此它默认为具有最大磁盘空间的卷。在本例中为 D 但 YMMV。

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

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

于 2012-09-18T15:44:28.377 回答
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>
于 2020-10-27T16:43:57.423 回答