使用 Windows 2003 Server 或 2000,生成 COM+ 应用程序代理以在另一个系统上使用,包括在导出期间创建的 MSI 包中的 .NET Enterprise Services 组件。.NET 组件也在 GAC 中注册,并且 regsvcs 在安装应用程序代理期间自动运行。
但是,我们发现 Windows Server 2008 不包含该程序集。它将包含 .tlb 但不包含 .dll,也不会将其安装在 GAC 中,当然,当应用程序找不到程序集时,一切都会崩溃。
任何人都知道如何确保这种行为像 2000-2003 年那样有效吗?
更新我们可以仅使用 .NET 程序集生成代理,并且它工作正常,但如果我们尝试将其他程序集或旧版 VB6 COM+ dll 添加到同一包中,则表示它们是为不同的处理器构建的。
更新我知道,如果您在任何 CPU 模式下构建(所有项目都设置为),那么当您通过将程序集拖放到组件服务应用程序中进行注册时,如果它是现有的 64 位应用程序,它将使用 64 位。但是,这是一个 32 位应用程序。在 COM+ 应用程序中注册了 VB6 dll,它们是 32 位的。所以应该使用 32 位注册表等...,并导致应用程序为 32 位。因此,当之后添加 .NET Any CPU 程序集时,它应该是 32 位的……但是当我们导出应用程序时,.NET 程序集不会添加到创建的 .MSI 中。
更新我们发现http://support.microsoft.com/kb/924729讨论了无法导出 32 位 ServicedComponents 的错误......有一个修补程序,但它适用于 Windows Server 2003。我们已经缩小了问题的范围down 并且只有 32 位 ServicedComponents 没有正确导出。