检查用户输入的注册号

时间:2011-08-17 20:08:31

标签: wix custom-action dllregistration

我试图使用自定义dll来检查用户输入的注册号,但每次都会运行“魔术”行为。在教程示例http://wix.tramontana.co.hu/tutorial/events-and-actions/whats-not-in-the-book中,自定义操作在'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" />

在dll中,使用MsiGetProperty (hInstall, "PIDKEY", Pid, &PidLen);不会从MySerialCheckDlg UI中指定的msi获取PIDKEY值

<Control Id="CDKeyEdit" Type="Edit" X="45" Y="159" Width="220" Height="16" Property="PIDKEY" Text="[PIDTemplate]" />

在msi中,未在行

中检查PIDACCEPTED属性
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish>

因此,InvalidPidDlg不会出现,安装过程会继续进行。

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

1 个答案:

答案 0 :(得分:2)

有两个序列:InstallExecuteSequenceInstallUISequence。如果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}" />

Type可以是EditMaskedEditPublish个元素应与对话框中的 Next 按钮控件相关联:

<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
相关问题