Wix:如何在 Wix 中添加浏览按钮

标签 wix

有没有一种简单的方法可以在 Wix 中添加浏览按钮。我通过修改 WixUI_InstallDir.wxs 创建了一个自定义。此浏览按钮位于另一个对话框中(与用于定位安装路径的对话框不同)。此浏览按钮将用于指定放置将在安装期间创建的日志文件的路径。

编辑:

对“下面的代码”的混淆感到抱歉。我最初打算显示代码,但上述回复的空间有限。在这里,我添加了代码。我现在设法显示浏览对话框,但我需要能够更改路径,以便它与安装路径的浏览对话框路径不同,即 _BrowseProperty。我下面的代码使用 _LogBrowseProperty 但我不确定如何正确定义它以及我应该在哪里定义它。使用下面的代码将产生 2819 错误。你能帮忙看看这里有什么问题吗?非常感谢。

CUSTOMDIR 在 Product.wxs 中定义

 <Property Id='CUSTOMDIR' Value="TARGETDIR"></Property>

下面是在 MyWixUI_InstallDir.wxs
   <Control Id="LogFolderLabel" Type="Text" X="20" Y="160" Width="290" Height="30" NoPrefix="yes"
                     Text="Folder Label" />
            <Control Id="LogFolder" Type="PathEdit" X="20" Y="200" Width="320" Height="18" Property="CUSTOMDIR"
                     Indirect="yes" />
            <Control Id="ChangeFolder" Type="PushButton" X="20" Y="220" Width="56" Height="17"
                     Text="Change Folder" />

....
  <Publish Dialog="myDlg" Control="ChangeFolder" Property="_LogBrowseProperty" Value="[CUSTOMDIR]" Order="1">1</Publish>
  <Publish Dialog="myDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>


  <Property Id="_LogBrowseProperty" Value="TARGETDIR" />

最佳答案

我正在寻找一段时间来尝试做同样的事情并修改了 Wix BroseDlg 对话框来实现这一点。

在父控件中,我有以下路径编辑和按钮控件:

<Control Id="LogFilePathValue" Type="PathEdit" X="50" Y="205" Width="215" Height="18" Property="LOGFILE_PATH"/>
    <Control Id="LogFilePathButton" Type="PushButton" X="270" Y="205" Width="50" Height="17" Text="!(loc.LogFilePathButton_Text)">
      <Publish Property="LOGFILE_PATH_TEMP" Value="[LOGFILE_PATH]" Order="1">1</Publish>
      <Publish Event="SpawnDialog" Value="MyLogFileDialog" Order="2">1</Publish>
    </Control>
</Control>

MyLogFileDialog 然后看起来像这样:
<Dialog Id="MyLogFileDialog" Width="370" Height="270" Title="!(loc.MyLogFileDialog_DialogTitle)">
    <Control Id="PathEdit" Type="PathEdit" X="25" Y="202" Width="320" Height="18" Property="LOGFILE_PATH_TEMP" />
    <Control Id="OK" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUIOK)">
      <Publish Property="LOGFILE_PATH" Value="[LOGFILE_PATH_TEMP]" Order="1">1</Publish>
      <Publish Event="EndDialog" Value="Return" Order="2">1</Publish>
    </Control>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
      <Publish Event="EndDialog" Value="Return">1</Publish>
    </Control>
    <Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="!(loc.BrowseDlgComboLabel)" />
    <Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="LOGFILE_PATH_TEMP" Fixed="yes" Remote="yes">
      <Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
    </Control>
    <Control Id="WixUI_Bmp_Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgWixUI_Bmp_UpTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgWixUI_Bmp_Up)">
      <Publish Event="DirectoryListUp" Value="0">1</Publish>
    </Control>
    <Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgNewFolder)">
      <Publish Event="DirectoryListNew" Value="0">1</Publish>
    </Control>
    <Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="98" Property="LOGFILE_PATH_TEMP" Sunken="yes" TabSkip="no" />
    <Control Id="PathLabel" Type="Text" X="25" Y="190" Width="320" Height="10" TabSkip="no" Text="!(loc.BrowseDlgPathLabel)" />
    <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.BrowseDlgBannerBitmap)" />
    <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.MyLogFileDialog_TitleBody)" />
    <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.MyLogFileDialog_TitleMain)" />
  </Dialog>

然后,您必须确保在调用此父表单之前设置了属性 LOGFILE_PATH。就我而言,我使用的是我自己的 UI_Mondo 版本,因此我在用户选择安装类型后设置了该属性:
  <Publish Dialog="SetupTypeDlg" Control="TypicalButton" Property="LOGFILE_PATH" Value="[COMPONENTINSTALLFOLDER]\Logs" Order="1">1</Publish>
  <Publish Dialog="SetupTypeDlg" Control="TypicalButton" Event="NewDialog" Value="ParentDialogWithLogLocationControls" Order="2">1</Publish>

关于Wix:如何在 Wix 中添加浏览按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979835/

相关文章:

installation - 运行 RemovePreviousVersion 时,MSI 不会安装所有文件

wix - 如何使用 Wix 3.11 检查 .net framework 4.7.1

xml - 维克斯 MSMQ : The Product element contains an unexpected child element 'msmq:MessageQueue'

deployment - 为什么UAC对话框需要很长时间才能显示?

wix - 在产品条件之前执行自定义操作

c# - 使用 .NET 控件的 WiX 安装程序在 32 版本上设置注册表项。 64位,WoW6432节点

c# - 根据权限设置默认安装目录

wix - Windows 8 开始屏幕固定

deployment - 是否可以在 MSI 包中添加支持以在安装后更改应用程序的文件夹?

wix:安装开始前运行外部 msi