我在visual studio中有一个安装程序解决方案,其中包含C#windows应用程序引导程序和两个msi项目。我想为卸载序列期间运行的两个msis中的一个安排自定义操作 - 所以我首先将CustomActions项目添加到同一个解决方案(称为" CustomActions"),其中包含CustomAction.cs文件定义要调度的自定义函数。此函数现在应该只写一些日志文件:
namespace CustomActions
{
public class CustomActions
{
[CustomAction]
public static ActionResult UninstallSecondaryMsi(Session session)
{
session.Log("Begin CustomAction1");
/* Search for ProductCode of the secondary msi here; run msiexec to uninstall it */
return ActionResult.Success;
}
}
我将CustomActions项目引用添加到我的msi项目中,然后将以下内容添加到我的product.wxs中:
<!-- Custom Actions -->
<Fragment>
<Binary Id="customActionDLL" SourceFile="$(var.CustomActions.TargetDir)\CustomActions.CA.dll" />
<CustomAction Id="CustomAction_GetRegistryKey"
BinaryKey="customActionDLL"
DllEntry="UninstallSecondaryMsi"
Execute="immediate"
Return="check" />
<InstallExecuteSequence>
<Custom Action="CustomAction_GetRegistryKey"
After="InstallFinalize"></Custom>
</InstallExecuteSequence>
</Fragment>
我运行了触发msi的引导程序,但是&#34;开始CustomAction1&#34;字符串不在日志文件中。我想也许它不是正确记录,但是当我用Orca.exe查看生成的msi时,我看到我的自定义操作没有在CustomActions表或InstallExecuteSequence表下安排。
我有什么东西在这里失踪吗?我还猜测CustomActions.CA.dll的路径是不正确的,并尝试硬编码DLL的路径,但这也不起作用。非常感谢任何帮助,提前谢谢!
答案 0 :(得分:3)
啊,我的自定义操作元素位于主要的Product.wxs文件中,但是位于不同的片段中,并且该片段未被引用到任何地方。我在Fragment下面放了一个ComponentGroup,并在Feature元素下引用了它的ID - 它起作用了。道歉。