我正在使用基本的 MSI InstallShield 安装,并希望从使用 vbscript 迁移到 c# 自定义操作。
我对存储在二进制表中的程序集使用托管 dll 自定义操作
我已经处理了依赖关系,但是在 WIX V3 和 WIX V4 自定义操作 installshield 项目中,当 MSI 调用操作时,抛出以下异常
InstallShield:异常:System.NullReferenceException:对象引用未设置为对象的实例。
我已经尝试过使用 visual studio 的 heatwave 扩展构建的 WIX v3 和 V4 自定义操作。
自定义操作的代码与扩展程序生成的代码没有变化。
namespace CustomAction1
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("Begin CustomAction1");
return ActionResult.Success;
}
}
}
我将 v3 和 v4 项目的参考程序集放在 supportdir 中进行测试
Microsoft.Deployment.WindowsInstaller.dll WixToolset.Dtf.WindowsInstaller.dll
之后 将 Dependency0 属性添加到 V3 项目中的 [SUPPORTDIR]\Microsoft.Deployment.WindowsInstaller.dll 和 将 Dependency0 属性添加到 V4 项目中的 [SUPPORTDIR]\WixToolset.Dtf.WindowsInstaller.dll
找不到更多与缺失依赖相关的异常
但是在 WIXV3 和 WIXv4 项目中,当在 MSI 日志文件中执行自定义操作时,我会遇到相同的异常
InstallShield:CustomActionData 未提供延迟操作请求的属性 MsiHiddenProperties InstallShield:异常:System.NullReferenceException:未将对象引用设置为对象的实例。 在 InstallShield.ClrHelper.CustomActionHelper.LoadResourceMapping(XmlDocument 文档) 在 InstallShield.ClrHelper.CustomActionHelper.GetEntryPointInfo(Int32 entryNumber) 在 InstallShield.ClrHelper.CustomActionHelper.RunAction(UInt32 installHandle,Int32 entryNumber,Int64 instanceHandle) InstallShield:托管代码引发了未处理的异常。
这很奇怪,因为自定义操作是如此简单。
任何人都可以建议我可能在哪里出错吗?