使用COMAdmin interop运行WiX CustomAction时出现FileNotFoundException

时间:2010-04-14 10:09:11

标签: c# installer wix com+ custom-action

我正在尝试创建一个WiX自定义操作,这将允许我作为升级安装的一部分关闭和清除COM +包,或者在初始安装过程中创建和配置新的COM +包。我以前在标准的Visual Studio MSI中将其作为CustomAction运行,但这只允许在复制文件后执行自定义操作 - 这将因程序包仍在运行而失败。

已添加COMAdmin.dll作为CustomAction项目的引用,并设置为CopyLocal = true。在自定义操作项目的bin文件夹中,存在Interop.COMAdmin.dll。 this question的答案似乎表明它应该有用。

尝试安装时,我在MSI日志中收到以下异常:

MSI (s) (C4:04) [10:40:34:205]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI119.tmp, Entrypoint: BeforeInstall
SFXCA: Extracting custom action to temporary directory: C:\WINDOWS\Installer\MSI119.tmp-\
SFXCA: Binding to CLR version v2.0.50727
Calling custom action MyCustomAction!MyCustomAction.CustomActions.BeforeInstall
Exception thrown by custom action:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'Interop.COMAdmin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'Interop.COMAdmin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'
   at MyCustomAction.CustomActions.BeforeInstall(Session session)

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value  (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value .

   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture)
   at Microsoft.Deployment.WindowsInstaller.CustomActionProxy.InvokeCustomAction(Int32 sessionHandle, String entryPoint, IntPtr remotingDelegatePtr)

1 个答案:

答案 0 :(得分:0)

我建议切换到属于WiX工具集的DTF,而不是使用Visual Studio中的Installer类。与安装程序类相比,DTF更灵活,并且与Windows Installer集成得更好。