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
Wix 检查用户输入的注册号_Wix_Custom Action_Dllregistration - Fatal编程技术网

Wix 检查用户输入的注册号

Wix 检查用户输入的注册号,wix,custom-action,dllregistration,Wix,Custom Action,Dllregistration,我试图使用自定义dll来检查用户输入的注册号,但每次我都会遇到“神奇”的行为。在教程示例中,自定义操作在“CostFinalize”之后运行,通常应在文件复制过程之前运行,但结果表明,该操作在出现第一个具有许可协议的对话框之前运行。我试图通过在注册对话框中单击“下一步”按钮时分配操作来解决此问题 <Publish Dialog="MySerialCheckDlg" Control="Next" Event="DoAction" Value="CheckingPID">1&l

我试图使用自定义dll来检查用户输入的注册号,但每次我都会遇到“神奇”的行为。在教程示例中,自定义操作在“CostFinalize”之后运行,通常应在文件复制过程之前运行,但结果表明,该操作在出现第一个具有许可协议的对话框之前运行。我试图通过在注册对话框中单击“下一步”按钮时分配操作来解决此问题

<Publish Dialog="MySerialCheckDlg" Control="Next" Event="DoAction"      Value="CheckingPID">1</Publish>
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
...
<CustomAction Id="CheckingPID" BinaryKey="CheckPID" DllEntry="CheckPID" />

<Binary Id="CheckPID" SourceFile="serialcheck.dll" />
在msi中,PIDACCEPTED属性未在行中检查

<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
pid=“0”
因此,InvalidIDDLG不会出现,安装过程将继续进行


请指定WiX操作序列的顺序,或者指定在这种情况下可以使用的任何其他方法。

有两个序列:
InstallExecuteSequence
InstallUISequence
。如果MSI以完整UI运行,它将从
InstallUISequence
执行操作;如果未显示UI,则跳过这些操作。
InstallExecuteSequence
中的操作在安装过程中执行,无论是否使用UI

首先,您的
PIDKEY
属性是否绑定到编辑控件?您应该在要求用户键入PIDKEY的对话框中输入类似的内容:

<Control Id="PidKeyEdit" Type="Edit" X="45" Y="105" Width="220" Height="18" Property="PIDKEY" Text="{80}" />
使用详细日志记录运行安装,以查看操作的执行方式以及属性值的更改方式:

msiexec /i your-product.msi /lv* your-product.log
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17"
         Default="yes" Text="Next">
    <Publish Event="DoAction" Value="CheckingPID">1</Publish>
    <Publish Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>
</Control>
msiexec /i your-product.msi /lv* your-product.log