Wix C#Custom Action根本不执行

时间:2014-01-30 15:49:59

标签: c# wix custom-action

我有一个安装程序,其中包含一个包含按钮的自定义屏幕。按下该按钮时,必须运行自定义操作,以验证一些事情,并返回成功或错误。

我的按钮定义如下:

<Control Type="PushButton" Id="DatabaseVerifyConnectionButton" X="118" Y="150" Width="116" Height="17" Text="Verify Connection" Property="DATABASEVERIFYCONNECTIONBUTTONPROPERTY" Default="yes">
    <Publish Event="DoAction" Value="VerifyDatabaseConnection">1</Publish>
    <Publish Event="SpawnDialog" Value="VerifySuccessDlg">VERIFIEDCONNECTION = "1"</Publish>
    <Publish Event="SpawnDialog" Value="VerifyFailedDlg">VERIFIEDCONNECTION = "0"</Publish>
</Control>

我的自定义操作XML

<CustomAction Id="VerifyDatabaseConnectionCA"
                BinaryKey="DatabaseCustomAction.CA.dll"
                DllEntry="VerifyDatabaseConnection2"
                Execute="immediate"
                Return="check"/>

<CustomAction Id='VerifyDatabaseConnection'
    Property='VerifyDatabaseConnectionCA'
    Execute='immediate'
    Value="ServerIP=[DATABASESERVERIPTEXTBOXPROPERTY];Username=[DATABASEUSERNAMETEXTBOXPROPERTY];Password=[DATABASEPASSWORDTEXTBOXPROPERTY]"/>

我的自定义操作C#代码:

    [CustomAction]
    public static ActionResult VerifyDatabaseConnection(Session session)
    {
        System.Diagnostics.Process.Start(@"C:\Windows\System32\calc.exe");

        return ActionResult.Failure;
    }

日志显示以下内容:

MSI (c) (58:B4) [16:39:45:183]: Doing action: VerifyDatabaseConnection
Action 16:39:45: VerifyDatabaseConnection. 
Action start 16:39:45: VerifyDatabaseConnection.
Action ended 16:39:45: VerifyDatabaseConnection. Return value 1.

我尝试了很多东西。附加调试器不起作用。回归成功或失败,似乎并不重要。哎呀,单击按钮时它甚至没有启动计算器。我注意到更改自定义操作的入口点似乎根本不重要。

我还阅读了一些关于MakeSfxCA.exe的内容,但我无法在生活中找到任何关于如何使其正常工作的内容。但我还读到,如果您将自定义操作项目添加为自定义操作项目,Visual Studio应该为您执行此操作。

我在这里完全失败了。为什么这不起作用?它显示了无处不在的成功,但它根本不执行任何代码。

1 个答案:

答案 0 :(得分:1)

<CustomAction Id="VerifyDatabaseConnectionCA"
                    BinaryKey="DatabaseCustomAction.CA.dll"
                    DllEntry="VerifyDatabaseConnection2"
                    Execute="immediate"
                    Return="check"/>

检查DLLEntry名称“VerifyDatabaseConnection2”,但实际的自定义操作方法名称是“VerifyDatabaseConnection”(缺少2,因此永远不会被调用“)。

同时更改publish元素以调用“VerifyDatabaseConnectionCA”而不是“VerifyDatabaseConnection”。