我正在使用托管 C++,即从我的 C++ 代码访问 .Net Framework 功能。有问题的代码是从自定义操作 dll 调用的,并且是我们的 .msp 包之一的一部分。
场景:我们正在使用 RegistrationHelper::InstallAssembly Method (String, String%, String%, InstallationFlags)
命名System.EnterpriseServices
空间将程序集安装到 COM+ 中。上面的代码通过使用磁盘上的类型库文件将程序集安装到 COM+ 中。
这段代码是从系统上下文中运行的。我们在 20% 的服务器上使用上述方法失败。代码失败,出现以下异常:
System.EnterpriseServices.RegistrationException:无法将类型库“[.tlb 文件的路径]”安装到应用程序“[应用程序名称]”中。在 System.EnterpriseServices.RegistrationDriver.InstallAssembly(RegistrationConfig regConfig, Object obSync) 在 System.EnterpriseServices.RegistrationHelper.InstallAssemblyFromConfig(RegistrationConfig& regConfig) 在 System.EnterpriseServices.RegistrationHelper.InstallAssembly(字符串程序集,字符串和应用程序,字符串分区,字符串和 tlb,InstallationFlags installFlags )在 System.EnterpriseServices.RegistrationHelper.InstallAssembly(字符串程序集,字符串和应用程序,字符串和 tlb,InstallationFlags installFlags)在 ComPlusRegistrationWrapper.CtxRegsvcs.RegisterComPlus(字符串程序集,字符串应用程序名称,字符串 TLB)
上述异常已通过使用ToString()
System.Exception 类的方法捕获。
请注意,在上述异常中: [.tlb 文件的路径] - 磁盘上类型库文件的路径 [应用程序名称] - COM+ 应用程序的名称。
该代码正在 Windows 2008 R2 上执行。Reflector 确认有问题的程序集是针对 .Net FW 2.0 编译的
我不明白为什么这只发生在一部分服务器上。
为了收集更多数据,这就是我的想法:
- 要求客户运行 ctxregsvcs.exe 将程序集手动安装到 COM+ 中,看看是否成功。
有没有人对如何进一步调试有任何指示?