【发布时间】:2009-12-18 19:25:01
【问题描述】:
使用 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。我们已缩小问题范围关闭,只有 32 位 ServicedComponents 无法正确导出。
【问题讨论】:
-
你的服务器是 2008 x64 吗?
-
是的。我用更多信息更新了我的问题。