User interface Wix UI自定义:将InstallScopeDlg添加到WixUI

User interface Wix UI自定义:将InstallScopeDlg添加到WixUI,user-interface,wix,windows-installer,wix3.6,User Interface,Wix,Windows Installer,Wix3.6,我正在尝试使用Wix将InstallScopeDlg添加到我的安装程序中。由于InstallScopeDlg仅在WixUI\u Advanced中可用,但我不需要该UI中的其他对话框,因此我决定通过复制WixUI\u Minimal代码并重命名为WixUI\u MyMinimal来创建自己的UI。然后,我更改了一些序列和按钮名称,以便可以将InstallScopeDlg放在WelcomeEulaDlg之后和ProgressDlg之前。我还将其他必需的对话框复制到VisualStudio中的Wix

我正在尝试使用Wix将
InstallScopeDlg
添加到我的安装程序中。由于
InstallScopeDlg
仅在
WixUI\u Advanced
中可用,但我不需要该UI中的其他对话框,因此我决定通过复制
WixUI\u Minimal
代码并重命名为
WixUI\u MyMinimal
来创建自己的UI。然后,我更改了一些序列和按钮名称,以便可以将
InstallScopeDlg
放在
WelcomeEulaDlg
之后和
ProgressDlg
之前。我还将其他必需的对话框复制到VisualStudio中的Wix项目中
界面显示正确,但是
InstallScopeDlg
上的“下一步”按钮不起作用,并且显示
ProgressDlg
,而不执行任何操作

1-这是添加InstallScopeDlg的正确解决方案吗?
2-如何解决此问题

以下是WixUI\u MyMinimal的代码

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
    <WixVariable Id="WixUISupportPerUser" Value="1" Overridable="yes" />
    <WixVariable Id="WixUISupportPerMachine" Value="1" Overridable="yes" />
    <PropertyRef Id="ApplicationFolderName" />

    <CustomAction Id="WixSetDefaultPerUserFolder" Property="WixPerUserFolder" Value="[LocalAppDataFolder]Apps\[ApplicationFolderName]" Execute="immediate" />
    <CustomAction Id="WixSetDefaultPerMachineFolder" Property="WixPerMachineFolder" Value="[ProgramFilesFolder][ApplicationFolderName]" Execute="immediate" />
    <CustomAction Id="WixSetPerUserFolder" Property="APPLICATIONFOLDER" Value="[WixPerUserFolder]" Execute="immediate" />
    <CustomAction Id="WixSetPerMachineFolder" Property="APPLICATIONFOLDER" Value="[WixPerMachineFolder]" Execute="immediate" />

    <InstallExecuteSequence>
        <Custom Action="WixSetDefaultPerUserFolder" Before="CostFinalize" />
        <Custom Action="WixSetDefaultPerMachineFolder" After="WixSetDefaultPerUserFolder" />
        <Custom Action="WixSetPerUserFolder" After="WixSetDefaultPerMachineFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged)))</Custom>
        <Custom Action="WixSetPerMachineFolder" After="WixSetPerUserFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
    </InstallExecuteSequence>


    <UI Id="WixUI_MyMinimal">
        <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
        <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
        <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />

        <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
        <Property Id="myWixUI_Mode" Value="InstallCustom" />

        <DialogRef Id="ErrorDlg" />
        <DialogRef Id="FatalError" />
        <DialogRef Id="FilesInUse" />
        <DialogRef Id="MsiRMFilesInUse" />
        <DialogRef Id="PrepareDlg" />
        <DialogRef Id="ProgressDlg" />
        <DialogRef Id="ResumeDlg" />
        <DialogRef Id="UserExit" />
        <DialogRef Id="WelcomeDlg" />
        <DialogRef Id="WelcomeEulaDlg" />
        <DialogRef Id="InstallScopeDlg"/>

        <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>

        <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">1</Publish>

        <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">1</Publish>

        <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg" Order="2">1</Publish>
        <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg" Order="2">1</Publish>
        <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg" Order="2">1</Publish>

        <Publish Dialog="InstallScopeDlg" Control="Next" Property="WixAppFolder" Value="WixPerUserFolder" Order="1">!(wix.WixUISupportPerUser) AND NOT Privileged</Publish>
        <Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" Value="{}" Order="2">WixAppFolder = "WixPerUserFolder"</Publish>
        <Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" Value="1" Order="3">WixAppFolder = "WixPerMachineFolder"</Publish>
        <Publish Dialog="InstallScopeDlg" Control="Next" Property="APPLICATIONFOLDER" Value="[WixPerUserFolder]" Order="4">WixAppFolder = "WixPerUserFolder"</Publish>
        <Publish Dialog="InstallScopeDlg" Control="Next" Property="APPLICATIONFOLDER" Value="[WixPerMachineFolder]" Order="5">WixAppFolder = "WixPerMachineFolder"</Publish>
        <Publish Dialog="InstallScopeDlg" Control="Next" Event="NewDialog" Value="ProgressDlg" Order="6">WixAppFolder = "WixPerUserFolder"</Publish>
        <Publish Dialog="InstallScopeDlg" Control="Next" Event="NewDialog" Value="ProgressDlg" Order="7">WixAppFolder = "WixPerMachineFolder"</Publish>

        <Publish Dialog="InstallScopeDlg" Control="Back" Event="NewDialog" Value="WelcomeEulaDlg" Order="2">1</Publish>

        <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="WelcomeEulaDlg" Order="2">!(wix.WixUISupportPerMachine) AND !(wix.WixUISupportPerUser)</Publish>
        <Publish Dialog="WelcomeEulaDlg" Control="Install" Event="NewDialog" Value="InstallScopeDlg" Order="2">!(wix.WixUISupportPerMachine) AND !(wix.WixUISupportPerUser)</Publish>
        <Publish Dialog="WelcomeEulaDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">1</Publish>
        <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="2">1</Publish>

        <InstallUISequence>
            <Show Dialog="WelcomeDlg" Before="WelcomeEulaDlg">Installed AND PATCH</Show>
            <Show Dialog="WelcomeEulaDlg" Before="InstallScopeDlg">NOT Installed</Show>
            <Show Dialog="InstallScopeDlg" Before="ProgressDlg">NOT Installed</Show>
            <Custom Action="WixSetDefaultPerUserFolder" Before="CostFinalize" />
            <Custom Action="WixSetDefaultPerMachineFolder" After="WixSetDefaultPerUserFolder" />
            <Custom Action="WixSetPerUserFolder" After="WixSetDefaultPerMachineFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged)))</Custom>
            <Custom Action="WixSetPerMachineFolder" After="WixSetPerUserFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND (ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>

        </InstallUISequence>

        <Property Id="ARPNOMODIFY" Value="1" />
    </UI>

    <UIRef Id="WixUI_Common" />
</Fragment>

ACTION=“INSTALL”和APPLICATIONFOLDER=”“和(ALLUSERS=”“或(ALLUSERS=2和(非特权)))
ACTION=“INSTALL”和APPLICATIONFOLDER=“”和(ALLUSERS=1或(ALLUSERS=2和特权))
1.
1.
1.
1.
1.
1.
!(wix.wixuissupportperuser)并且没有特权
WixAppFolder=“WixPerUserFolder”
WixAppFolder=“WixPerMachineFolder”
WixAppFolder=“WixPerUserFolder”
WixAppFolder=“WixPerMachineFolder”
WixAppFolder=“WixPerUserFolder”
WixAppFolder=“WixPerMachineFolder”
1.
!(wix.wixuissupportpermachine)和!(wix.wixuissupportperuser)
!(wix.wixuissupportpermachine)和!(wix.wixuissupportperuser)
1.
1.
安装并修补
未安装
未安装
ACTION=“INSTALL”和APPLICATIONFOLDER=”“和(ALLUSERS=”“或(ALLUSERS=2和(非特权)))
ACTION=“INSTALL”和APPLICATIONFOLDER=“”和(ALLUSERS=1或(ALLUSERS=2和特权))

看看我的开源项目ISWIX(CodePlex)。它包括一个多项目解决方案模板,其中包括一个用于构建MSI的项目。它添加了对WiXUI的引用,并使用一系列片段引用内置对话框集,然后再添加一个引用将自定义对话框插入该对话框集中。这是通过将发布元素(DoAction ControlEvents)添加到相邻对话框的“下一步”和“上一步”按钮来实现的。所有这些都是以一种尽可能接近继承的方式实现的

另外,请确保您确实希望支持按用户安装。他们是一个痛苦的处理,只有在有限的情况下才有价值


在“下一步”和“上一步”按钮中,所有自定义对话框都在工作。除了installScopeDlg。。!!!如何使用此InstallScopeDlg。。?