如何确保FindRelatedProducts在使用WiX显示UI后运行?

如何确保FindRelatedProducts在使用WiX显示UI后运行?,wix,windows-installer,Wix,Windows Installer,我有一个MSI安装程序,并在安装程序UI中指定每台机器的安装。每台机器也安装了以前的版本 但是,FindRelatedProducts报告当前安装为每个用户 MSI(c)(A4:F0)[13:33:20:490]:FindRelatedProducts:*当前安装是按用户**。产品“”的相关安装是每台计算机进行的。正在跳过… 从日志中,我可以看到ALLUSERS属性仅在FindRelatedProducts运行后创建(注意时间戳): MSI(c)(A4:A8)[13:33:25:032]:属性更

我有一个MSI安装程序,并在安装程序UI中指定每台机器的安装。每台机器也安装了以前的版本

但是,FindRelatedProducts报告当前安装为每个用户

MSI(c)(A4:F0)[13:33:20:490]:FindRelatedProducts:*当前安装是按用户**。产品“”的相关安装是每台计算机进行的。正在跳过…

从日志中,我可以看到
ALLUSERS
属性仅在FindRelatedProducts运行后创建(注意时间戳):

MSI(c)(A4:A8)[13:33:25:032]:属性更改:添加ALLUSERS属性。其值为“2”。

根据用户选择的内容,从UI发布属性ALLUSERS

      <Publish Property="ALLUSERS" Value="2"><![CDATA[FolderForm_AllUsers="ALL" AND VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1]]></Publish>
      <Publish Property="ALLUSERS" Value="{}"><![CDATA[FolderForm_AllUsers="ME" AND VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1]]></Publish>


    <Control Id="AllUsersRadioGroup" Type="RadioButtonGroup" X="20" Y="175" Width="342" Height="42" Property="FolderForm_AllUsers" Text ="empty">      
      <RadioButtonGroup Property="FolderForm_AllUsers">
        <RadioButton Value="ALL" X="0" Y="0" Width="342" Height="17" Text="$(loc.InstallForAll)" />
        <RadioButton Value="ME" X="0" Y="18" Width="342" Height="17" Text="$(loc.InstallForMe)" />
      </RadioButtonGroup>

      <Condition Action="show"><![CDATA[VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1]]></Condition>
      <Condition Action="hide"><![CDATA[NOT (VersionNT>=400 AND Privileged=1 AND FolderForm_AllUsersVisible=1)]]></Condition>
    </Control>
=400和Privileged=1和FolderForm\u allusvisible=1]>
=400,特权=1,文件夹形式\u AllUsersVisible=1]>
=400,特权=1,文件夹形式\u AllUsersVisible=1]>
=400且特权=1且文件夹形式_allusvisible=1)]]>
因此,新版本与现有版本一起安装(添加/删除程序中存在两个条目)


新产品发现
新产品发现
这仅在每台机器安装两个版本的应用程序的情况下才会发生,因为
FindRelatedProducts
显然采用每用户安装(因为它在用户能够选择其中一个单选按钮之前运行,因此在运行时没有设置
ALLUSERS
属性)


如何确保
FindRelatedProducts
仅在用户指定的用户界面发布
ALLUSERS
后执行?

我发现我需要添加以下内容,以确保
FindRelatedProducts
在用户做出选择后在用户界面内运行:

<Publish Event="DoAction" Value="FindRelatedProducts">1</Publish>
1


我发现不需要严格使用suppress属性-在
InstallUISequence

中,如果不显式抑制操作,它似乎也可以工作。最好在对话框完成后找到一种方法对其排序。或者至少测试一下,如果对话框中有后退按钮,并且用户在后退和下一个对话框中可能在每台机器和每用户之间进行了更改后,您可以多次点击下一个按钮并多次运行FindRelatedProducts。正确-确保用户在更改安装时不会返回,这将是一件好事模式,但这对我来说已经足够好了。感谢您的评论:)@PhilDW如果您有一个工作示例,说明如何在对话框完成后正确排列RemoveRelatedProducts操作的顺序,我将非常感谢您将其作为此问题的答案。您只需要在UI序列中的对话框之后排列FindRelatedProducts-您应该能够说它是在之后=“myFinalDialog”。但是,我没有将其放在InstallScopeDlg中,而是将其放在下一个对话框InstallDirDlg中。这避免了用户单击“上一步”时出现任何问题。
<Publish Event="DoAction" Value="FindRelatedProducts">1</Publish>