我已经为我的COM服务器DLL和客户端应用程序创建了必要的清单,以便在Windows XP中免注册。我已经测试了各种组合(有和没有注册),并且在所有情况下,如果清单存在,客户端应用程序会看到库的并排版本,如果没有,则会看到已注册的版本(或COM错误)如果没有注册的话)。我已经在我的Windows XP开发机器上进行了测试,并为同事提供了文件(DLL,客户端EXE和每个清单一个),他们也在自己的Windows XP机器上成功运行了所有内容。清单是外部XML文件,而不是嵌入式资源。到现在为止还挺好。

但是,当我将文件复制到Windows Server 2003计算机时,它不起作用。我收到了静默失败,但应用程序事件日志中出现了应用程序错误(见下文)。如果我取消注册DLL并删除清单,我会收到类似的错误(在命令提示符下是静默的,但事件日志中的应用程序错误)。显然找到注册存在一些问题。我已经在我可以在我们公司访问的每台Windows Server 2003机器上重现了这一点。根据关于并排/免注册COM的Microsoft文档,它应该适用于Windows XP及更高版本,以及Windows Server 2003及更高版本。

要明确的是,相同的客户端在相同的Windows服务器上运行相同的COM DLL的注册使用regsvr32)版本的相同Windows Server 2003机器上完美运行我正在尝试使用相同的登录凭据进行免注册COM。换句话说,没有伪装成免注册COM问题的内在问题 - 当服务器在注册表中全局注册时,此客户端和服务器运行正常。

有人对如何进一步调查有任何想法吗?我不是Windows Server的专家,但是可能有一些策略设置需要更改以启用此支持吗?如果我可以找到必要的变更,我们的技术支持/基础设施人员可能不会这样做,但我不能依赖它们来研究这个问题,因为它们被淹没了。

如果它很重要(我认为不应该,但你永远不知道),DLL是用Delphi 2007编写的,而客户端是用Visual C ++编写的。

Event Type: Information
Event Source:   Application Error
Event Category: (100)
Event ID:   1004
Date:       5/2/2009
Time:       8:07:45 AM
User:       N/A
Computer:   ***server name****
Description:
Reporting queued error: faulting application ***program name***.exe, version 0.0.0.0, faulting module ***program name***.exe, version 0.0.0.0, fault address 0x0002ac9e.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
有帮助吗?

解决方案

要寻找的一件事是exe是否有内部清单。在XP中,exe清单搜索顺序是外部的,然后是内部的。在Server 2003及更高版本中,订单是内部的,然后是外部的。

其他提示

使用在Delphi 7中创建的COM服务器,如果COM服务器未注册且客户端应用程序在受限制的用户帐户下启动,我看到类似的问题,因为Delphi的COM实现总是尝试更新注册信息,即使是DLL的未明确调用RegisterServer函数。

要查看这是否有问题,请尝试在具有不受限制的管理权限的帐户上运行客户端应用程序。

MSDN提到,在Windows 2003下,应该在系统事件日志的特定部分详细说明免注册COM服务器的问题:

  

免费注册时排除故障   COM问题,事件查看器打开   Windows Server 2003是您的朋友。   当Windows XP或Windows Server 2003时   检测到配置错误   通常显示错误消息框   标题为您的应用程序   启动并包含该消息   “此应用程序未能启动   因为应用程序配置   是不正确的。重新安装   应用程序可以解决这个问题。“一世   建议你每当看到这个   消息,你重现问题   Windows Server 2003,请参阅   系统事件日志并查找事件   来自SideBySide来源。原因   我不建议你看看   这些情况下的Windows XP事件日志是   它总会包含一个   消息,例如“生成激活”   [path] [application]的上下文失败   文件名] .manifest的。参考错误   消息:操作完成   成功,"这没有用   找出问题所在。    http://msdn.microsoft.com/en-us/library/ ms973913.aspx#rfacomwalk_topic6

另外,如果可能,请告诉我们您使用的清单文件的文件名和内容。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top