Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 避免使用WiX安装程序中的条件进入下一个对话框_Installation_Wix_Windows Installer - Fatal编程技术网

Installation 避免使用WiX安装程序中的条件进入下一个对话框

Installation 避免使用WiX安装程序中的条件进入下一个对话框,installation,wix,windows-installer,Installation,Wix,Windows Installer,有人知道我是否/如何在满足某个条件时阻止基于WiX的MSI安装程序进入下一个对话框吗?我有以下代码: <Dialog Id="SelectIISApplicationPoolUserDialog" Width="370" Height="270" Title="$(var.ApplicationPoolUserDialogTitle)"> <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Heig

有人知道我是否/如何在满足某个条件时阻止基于WiX的MSI安装程序进入下一个对话框吗?我有以下代码:

<Dialog Id="SelectIISApplicationPoolUserDialog" Width="370" Height="270" Title="$(var.ApplicationPoolUserDialogTitle)">
  <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
    <Publish Property="APPLICATIONPOOLUSER" Value="{}">WEBSITE_APPLICATIONPOOLUSERTYPE = "local"</Publish>
    <Publish Property="APPLICATIONPOOLUSER" Value="1">WEBSITE_APPLICATIONPOOLUSERTYPE = "domain"</Publish>
    <Publish Event="DoAction" Value="CheckPortNumber">1</Publish>
  </Control>

网站\u APPLICATIONPOOLUSERTYPE=“本地”
网站\u APPLICATIONPOOLUSERTYPE=“域”
1.
CheckPortNumber指的是:

<Binary Id="IISCA" SourceFile="binaries/MyCustomActions.IIS.CA.dll" />
<CustomAction Id="CheckPortNumber" 
              BinaryKey="IISCA" 
              DllEntry="IsFreePort" 
              Execute="immediate" />

此外,在其他地方,我们有以下声明:

<Publish Dialog="SelectIISApplicationPoolUserDialog" 
         Control="Next" 
         Event="NewDialog" 
         Value="SetSqlServerConnectionDialog">ISPORTFREE</Publish>
ISPORTFREE
当我运行安装程序并进入对话框选择应用程序池用户时,我单击next。然后,自定义操作检查端口号并设置ISPORTFREE变量。但是,无论iPortFree的结果如何,都不会显示下一个对话框。但当我再次单击“下一步”时,将显示下一个对话框


因此,我想要的是:当我单击next,并且输入的端口号正在使用时,我会收到一条警告,并且不会进入下一个对话框。如果没有使用,我将进入下一个对话框。

您需要设置
Publish/@Order
,以便按正确的顺序计算所有内容

类似于以下的操作可能会起作用:

<Publish Dialog="MyDlg" Control="Next" Event="DoAction" 
         Value="SomeAction" Order="1">1</Publish>
<Publish Dialog="MyDlg" Control="Next" Event="SpawnDialog" 
         Value="MyWarningDlg" Order="2">Not CONDITION</Publish>
<Publish Dialog="MyDlg" Control="Next" Event="NewDialog" 
         Value="MyOtherDlg" Order="3">CONDITION</Publish>
1
非条件
条件

谢谢。它起作用了,但我还必须进行不同的检查:ISPORTFREE=“False”,因为在自定义操作中,必须将字符串插入会话对象:session[“ISPORTFREE”]=False.ToString();