我遇到了关于wix和托管自定义操作的问题:我已经设法创建托管自定义操作并从我的安装程序调用它(在安装日志文件中验证它)。我的问题是,我没有管理它将数据传递给自定义操作。 Afaik如果我选择在这么晚的阶段运行自定义动作,我必须将动作标记为“延期”。有了这个限制,它只能访问CustomActionData属性吗?为什么这不适用于我的情况? (据我所知,我从样本中正确地采用了一切?)
这是我已经尝试过的:
自定义操作:
public class CustomActions
{
[CustomAction]
public static ActionResult RegisterDflHelp(Session session)
{
session.Log("Begin CustomAction1");
session.Log("Before Access to customactiondata");
//string helpdir = session["HELP_DIR"];
string cad = session["CustomActionData"];
Debugger.Break();
session.Log("Help dir is: " + helpdir);
session.Log("Custom Action Data is: " + cad);
return ActionResult.Success;
}
}
调用自定义操作的合并模块:
<CustomAction Id='RegisterDflHelp' BinaryKey='RegisterDflHelpDll' DllEntry='RegisterDflHelp' Execute='deferred' />
<CustomAction Id="HELP_DIR.SetProperty" Return="check" Property="HELP_DIR" Value="Teeest" />
<Property Id='HELP_DIR' Secure='yes'/>
<InstallExecuteSequence>
<Custom Action='HELP_DIR.SetProperty' After='InstallFiles' />
<Custom Action='RegisterDflHelp' After='HELP_DIR.SetProperty' />
</InstallExecuteSequence>
<Directory Id="TARGETDIR" Name="SourceDir">
</Directory>
<ComponentGroupRef Id="HelpGroup"/>
包含帮助合并模块的产品:
<Product....>
<Package....>
...
<Directory>
<!--Directory which gets the help folder--!>
<Merge Id ="DflHelpInstaller" SourceFile="DflHelpInstaller.msm" Language="1033" DiskId="1" />
有人有想法吗?提前致谢!!
丹尼尔
Btw:知道什么也很有趣:在安装过程的哪个阶段必须标记为延迟的操作?如果我在此阶段之前管理它来调用我的自定义操作。什么是优势?答案 0 :(得分:2)
您仍在设置HELP_DIR
属性而不是自定义操作数据。如果您尝试将RegisterDfHelp
操作的CustomActionData设置为“Teeest”,那么我认为您应该这样做:
<CustomAction Id="SetRegisterDflHelpCustomActionData" Return="check"
Property="RegisterDflHelp" Value="Teeest" />
<InstallExecuteSequence>
<Custom Action='SetRegisterDflHelpCustomActionData' After='InstallFiles' />
<Custom Action='RegisterDflHelp' After='SetRegisterDflHelpCustomActionData' />
</InstallExecuteSequence>
答案 1 :(得分:1)
上述样本不起作用的原因非常简单:
而不是:
CustomAction Id="HELP_DIR.SetProperty" Return="check" Property="HELP_DIR" Value="Teeest" />
我开始将属性属性设置为应获取自定义数据的Action!这里:
<CustomAction Id="HELP_DIR.SetProperty" Return="check" Property="RegisterDflHelp" Value="$(var.HelpSourceDir)" />
希望能帮助他人节省我用来解决这个愚蠢问题的时间; - )