Managed C++ を使用しています。つまり、C++ コードから .Net Framework 機能にアクセスしています。問題のあるコードは、カスタム アクション dll から呼び出されており、.msp パッケージの 1 つに含まれています。
シナリオ: アセンブリを COM+ にインストールするために名前空間RegistrationHelper::InstallAssembly Method (String, String%, String%, InstallationFlags)
から使用しています。System.EnterpriseServices
上記のコードは、ディスク上のタイプ ライブラリ ファイルを使用してアセンブリを COM+ にインストールします。
このコードは、システム コンテキストから実行されます。サーバーの 20% で上記の方法でエラーが発生しています。コードは次の例外で失敗します。
System.EnterpriseServices.RegistrationException: タイプ ライブラリ '[.tlb ファイルへのパス]' をアプリケーション '[アプリケーション名]' にインストールできませんでした。System.EnterpriseServices.RegistrationDriver.InstallAssembly(RegistrationConfig regConfig、オブジェクト obSync) で System.EnterpriseServices.RegistrationHelper.InstallAssemblyFromConfig(RegistrationConfig& regConfig) で System.EnterpriseServices.RegistrationHelper.InstallAssembly(文字列アセンブリ、文字列 & アプリケーション、文字列パーティション、文字列 & tlb、InstallationFlags installFlags ) System.EnterpriseServices.RegistrationHelper.InstallAssembly (文字列アセンブリ、文字列 & アプリケーション、文字列 & tlb、InstallationFlags installFlags) で ComPlusRegistrationWrapper.CtxRegsvcs.RegisterComPlus (文字列アセンブリ、文字列 ApplicationName、文字列 TLB) で
上記の例外はToString()
、System.Exception クラスのメソッドを利用してキャプチャされています。
上記の例外に注意してください: [.tlb ファイルへのパス] - ディスク上のタイプ ライブラリ ファイルへのパス [アプリケーションの名前] - COM+ アプリケーションの名前。
コードは Windows 2008 R2 で実行されています。Reflector は、問題のアセンブリが .Net FW 2.0 に対してコンパイルされていることを確認します
これがサーバーのサブセットでのみ発生する理由を理解できません。
より多くのデータを収集するために、これは私が考えたことです:
-顧客に、ctxregsvcs.exe を実行してアセンブリを手動で COM+ にインストールし、それが成功するかどうかを確認するよう依頼します。
これをさらにデバッグする方法についての指針はありますか?