自定义操作未运行

时间:2011-09-13 16:12:10

标签: wix custom-action

我已经为我的安装程序定义了custom action。安装程序似乎没有运行。

以下是WXS文件中定义自定义操作的行:

    <CustomAction Id="GetConfigProperties" BinaryKey="GetPropertiesDLL" DllEntry="GetPropertiesFromConfigFile" />

    <InstallExecuteSequence>
        <RemoveExistingProducts After="InstallInitialize" />
        <Custom Action="NewerVersionDetected" After="FindRelatedProducts">NEWERVERSIONDETECTED</Custom>
        <Custom Action="GetConfigProperties" After="FindRelatedProducts"></Custom>
        . . .            
    </InstallExecuteSequence>

    <Binary Id="GetPropertiesDLL" SourceFile="$(var.LPRCore Installer CBP Helper.TargetDir)\LPRCore Installer CBP Helper.CA.dll" />

我用Orca检查了MSI,相应的条目在MSI表中。

以下是CustomActions.cs文件中代码的摘录:

    [CustomAction]
    public static ActionResult GetPropertiesFromConfigFile(Session session) {
        // Output a start message to the install log
        session.Log( "Begin GetPropertiesFromConfigFile" );

        . . .


        return ActionResult.Success;
    }

代码中有一些其他session.Log语句,我想看看发生了什么。

现在,我已启用日志记录。当我在记事本中查看日志文件时,我看不到来自session.Log的调用的消息。我也看不到对GetConfigProperties的引用。看来自定义操作根本没有执行。我做错了什么?

3 个答案:

答案 0 :(得分:5)

事实证明自定义操作未运行,因为:

  1. 计划在错误的地方运行。我的错,我需要把它放在InstallUISequence部分,而不是InstallSequence部分。

  2. 我在行动开始之前就中止了安装。

  3. 当我将自定义操作放入InstallUISequence部分并在正确的位置时,一切运行正常。

    感谢您的尝试。

答案 1 :(得分:2)

如果您在日志文件中没有看到GetConfigProperties自定义操作的任何条目,则很可能原因是InstallExecutesequence元素驻留在单独的片段中,该片段未包含在包中。要将Fragment的内容包含到包中,您应该从Product元素中引用其中的任何元素。

例如,您可以将以下行添加到Product元素:

<CustomActionRef Id="GetConfigProperties" />

答案 2 :(得分:-1)

我认为您缺少应该运行自定义操作的条件。要么给出一些条件<Custom Action="GetConfigProperties" After="FindRelatedProducts">NOT INSTALLED AND NOT REMOVE</Custom>,要么将它设为默认值,然后将1作为条件 <Custom Action="GetConfigProperties" After="FindRelatedProducts">1</Custom>