WiX:将数据传递到托管自定义操作不起作用

时间:2009-11-30 14:23:56

标签: wix windows-installer wix3

我遇到了关于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:知道什么也很有趣:在安装过程的哪个阶段必须标记为延迟的操作?如果我在此阶段之前管理它来调用我的自定义操作。什么是优势?

2 个答案:

答案 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)" />

希望能帮助他人节省我用来解决这个愚蠢问题的时间; - )