当我的自定义对话框从我的 MSI 中的自定义操作脚本中显示时,如何预填充编辑框?

How to prefill edit boxes when my custom dialog is shown from the custom action script in my MSI?

我正在使用 WiX 在我的安装程序中创建自定义 dialog/page,基于 WixUI_Mondo。自定义对话框有编辑控件,类似这样:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <UI>
            <Dialog Id="ConfigDlg" Width="370" Height="270" Title="!(loc.SetupTypeDlg_Title)" >
                
                <Control Id="idTxt11" Type="Text" X="20" Y="65" Width="60" Height="16" Text="Name:" />
                <Control Id="idEdt11" Type="Edit" X="90" Y="60" Width="120" Height="20" Default="yes" Property="PROP_NAME" />

                <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
                <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Text="!(loc.WixUINext)" />
                <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
                    <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
                </Control>

            </Dialog>
        </UI>
    </Fragment>
</Wix>

单击“下一步”按钮时,我可以从我的自定义操作 DLL(用 C++ 编写)中读取这些控件,方法是这样调用它:

<Publish Dialog="ConfigDlg" Control="Next" Event="DoAction" Value="idCA_NextBtn">1</Publish>

但我还需要在页面首次显示时预先填充这些编辑框(通过从注册表中读取这些值)。如果有人正在升级或修复我的软件,可能需要这样做。

问题是,如何通过自定义操作执行此操作?

对于您需要从注册表中读取的每个 属性(对于 upgrades/repairs),只需添加一个 <RegistrySearch> 元素来填充这些属性。