我已经为我的安装程序定义了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
的引用。看来自定义操作根本没有执行。我做错了什么?
答案 0 :(得分:5)
事实证明自定义操作未运行,因为:
计划在错误的地方运行。我的错,我需要把它放在InstallUISequence部分,而不是InstallSequence部分。
我在行动开始之前就中止了安装。
当我将自定义操作放入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>