为什么无法从Burn的“浏览目录”面板中选择安装位置?

时间:2016-11-30 07:25:58

标签: wix windows-installer burn

是否有人在本机刻录软件包BA中的“选项”按钮下遇到“浏览文件夹”面板的问题?

我有一个编辑框,用于指定安装位置的位置。它被设置为默认位置。按“浏览”按钮可启动目录列表(“浏览文件夹”)以选择另一个安装位置。但是,无论选择什么,它都不会填充到编辑框中,因此无论用户选择什么,路径都将保持默认状态。可以手动更改(键入)“编辑”框内的路径,但不能通过“浏览”。

我想让这个工作,因为这是用户指定安装位置的唯一地方(我已经禁止了MSI的UI)。如果可能的话,我希望通过本地BA来完成。

我应该使用一些WiX标签来实现这项功能吗?我错过了什么?任何帮助表示赞赏。

以下是我认为与此问题相关的代码。

Bundle

<Variable Name="INSTALLLOC" Type="string" Value="[ProgramFiles6432Folder]"
   bal:Overridable="yes" />
<util:DirectorySearch
  Variable="INSTALLLOC"
  Path="[ProgramFiles6432Folder]" />

也在 Chain

<MsiPackage SourceFile="$(var.SoftwareMsi)"
   Vital="yes" Visible="yes" DisplayInternalUI="no" >
   <MsiProperty Name="PRODUCTDIR" Value="[INSTALLLOC]" />
</MsiPackage>

也适用于我的主题模板

<Page Name="Options">
  <Text X="175" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">Destination folder</Text>
  <Text X="175" Y="121" Width="-11" Height="17" FontId="0" DisablePrefix="yes">Select a folder where the application will be installed.</Text>
  <Editbox Name="INSTALLLOC" X="175" Y="143" Width="-91" Height="21" TabStop="yes" FontId="0" FileSystemAutoComplete="yes"/>
  <Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="0">
    <Text>Browse</Text>
    <BrowseDirectoryAction VariableName="INSTALLLOC" />
  </Button>
  <Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">OK</Button>
  <!-- And other buttons/text -->
</Page>

2 个答案:

答案 0 :(得分:0)

您使用的是自定义引导程序应用程序吗?

在wixstandardbootstrapperapplication源代码中,我们看到以下内容:

//
// OnClickOptionsBrowseButton - browse for install folder on the options page.
//
void OnClickOptionsBrowseButton()
{
    WCHAR wzPath[MAX_PATH] = { };
    BROWSEINFOW browseInfo = { };
    PIDLIST_ABSOLUTE pidl = NULL;

    browseInfo.hwndOwner = m_hWnd;
    browseInfo.pszDisplayName = wzPath;
    browseInfo.lpszTitle = m_pTheme->sczCaption;
    browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI;
    pidl = ::SHBrowseForFolderW(&browseInfo);
    if (pidl && ::SHGetPathFromIDListW(pidl, wzPath))
    {
        ThemeSetTextControl(m_pTheme, WIXSTDBA_CONTROL_FOLDER_EDITBOX, wzPath);
    }

    if (pidl)
    {
        ::CoTaskMemFree(pidl);
    }

    return;
}

启动浏览对话框(BROWSEINFOW)后,它将获取所选路径,然后更新文本控件。

此外,当您单击“返回”或“下一个/安装”时,您需要将InstallFolder变量设置为编辑框中的值。

答案 1 :(得分:0)

<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="0">
  <Text>Browse</Text>
  <BrowseDirectoryAction VariableName="INSTALLLOC" />
</Button>

是WiX v4.x主题语法,但您在评论中说您正在使用v3.x. WiX v3.x有这种硬编码的东西,所以你应该将你的主题基于v3.x主题。我不记得是否可以自动填充v3.x中的FolderEditbox

<Editbox Name="FolderEditbox" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" />
<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">#(loc.OptionsBrowseButton)</Button>
相关问题