Wix C# 自定义操作根本不执行

Wot*_*tuu 6 c# custom-action wix

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

我的按钮定义如下:

<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>
Run Code Online (Sandbox Code Playgroud)

我的自定义操作 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]"/>
Run Code Online (Sandbox Code Playgroud)

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

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

        return ActionResult.Failure;
    }
Run Code Online (Sandbox Code Playgroud)

日志显示以下内容:

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.
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多东西。附加调试器,不起作用。返回成功或失败,似乎无关紧要。哎呀,当您单击按钮时,它甚至不会启动计算器。我确实注意到更改自定义操作的入口点似乎根本无关紧要。

我还阅读了有关 MakeSfxCA.exe 的一些内容,但我终其一生都找不到有关如何使其正常工作的任何地方。但是我也读到如果您将自定义操作项目添加为自定义操作项目,Visual Studio 应该为您完成,我就是这样做的。

我在这里完全不知所措。为什么这行不通?它到处都显示成功,但它根本不执行任何代码。

Isa*_*110 1

<CustomAction Id="VerifyDatabaseConnectionCA"
                    BinaryKey="DatabaseCustomAction.CA.dll"
                    DllEntry="VerifyDatabaseConnection2"
                    Execute="immediate"
                    Return="check"/>
Run Code Online (Sandbox Code Playgroud)

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

还要更改发布元素以调用“VerifyDatabaseConnectionCA”而不是“VerifyDatabaseConnection”。