0

アップグレードインストールの一部としてCOM+パッケージをシャットダウンしてクリアしたり、初期インストールの一部として新しいCOM+パッケージを作成して構成したりできるWiXカスタムアクションを作成しようとしています。以前、これを標準のVisual Studio MSI内でCustomActionとして実行していましたが、これにより、ファイルがコピーされた後にのみカスタムアクションを実行できます。これは、パッケージがまだ実行されているため失敗します。

COMAdmin.dllは、CustomActionプロジェクトへの参照として追加され、CopyLocal=trueに設定されています。カスタムアクションプロジェクトのbinフォルダーには、Interop.COMAdmin.dllがあります。この質問への答えは、それが機能するはずであることを示唆しているようです。

インストールしようとすると、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)
4

1 に答える 1

0

Visual Studioのインストーラークラスを使用する代わりに、WiXツールセットの一部であるDTFに切り替えることをお勧めします。DTFは、インストーラークラスよりもはるかに柔軟性があり、Windowsインストーラーとの統合が優れています。

于 2010-07-11T14:46:10.387 に答える