在我的Windows WiX安装程序中,我的自定义操作无法运行

时间:2019-11-19 17:23:12

标签: wix windows-installer custom-action wix3.6

我希望安装程序/卸载程序删除一个包含运行时应用程序生成的内容的文件夹。我认为“自定义操作”将是解决之道。

我们正在使用WiX 3.6。

(出于特定的原因,我希望按安装程序的顺序使用它,但对该问题并不重要。)

这是我在xml中的CustomAction定义:

<Binary Id="CustomActionLib" SourceFile="$(var.CustomActionLibrary.TargetDir)$(var.CustomActionLibrary.TargetName).CA.dll" />
<CustomAction Id="DeleteLocalizedCA" Impersonate="yes" BinaryKey="CustomActionLib" DllEntry="DeleteLocalized" Return="check" />
<CustomAction Id="DeleteResourcesCA" Impersonate="yes" BinaryKey="CustomActionLib" DllEntry="DeleteResources" Return="check" />

这是我对它们的引用:

<InstallExecuteSequence>
  <Custom Action="DeleteLocalizedCA" Before="InstallFiles"/>
  <FindRelatedProducts Before="LaunchConditions" />
  <RemoveExistingProducts After="InstallFinalize" />
  <RemoveShortcuts>Installed AND NOT UPGRADINGPRODUCTCODE</RemoveShortcuts>
</InstallExecuteSequence>

<InstallUISequence>
  <Custom Action="DeleteLocalizedCA" Before="InstallFiles"/>
  <FindRelatedProducts Before="LaunchConditions" />
</InstallUISequence>

我将CustomActionLibrary项目添加到解决方案中,并从安装程序项目中添加了对它的引用,但是它从未运行,我也从未在日志中看到它,什么都没有!

这就是我的问题,为什么我的WiX自定义操作不运行?

1 个答案:

答案 0 :(得分:0)

经过数小时的谷歌搜索和阅读(博客文章,文档,Stackoverflow等)并进行了测试,我终于找到了一种解决方案,我的阅读都没有。

我必须放置一个InstallExecuteSequence才能将我的引用包含在一个包含ComponentGroup的片段中:

    <Fragment>
      <InstallExecuteSequence>
        <Custom Action="DeleteLocalizedCA" Before="InstallFiles">NOT Installed</Custom>
        <Custom Action="DeleteResourcesCA" Before="InstallFiles">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
      </InstallExecuteSequence>
     <ComponentGroup Id='StringsComponents'>
       ...
     </ComponentGroup>
   </Fragment>

我之前放入CustomAction引用的Fragment只有步骤,但是没有Component或ComponentGroup,因此显然什么也没做。 (我不是安装程序的原始作者,只是接替了一个在此方面无法帮助我的同事。)

希望这可以帮助其他在同一问题上苦苦挣扎的人。