如何对 COM 组件进行故障排除?
How do I troubleshoot a COM component?
对于这个问题的含糊不清,我深表歉意。
在将应用程序迁移到新的服务器环境期间,为应用程序公开 API 的 COM 组件 (.dll) 文件已停止工作。
有什么方法可以对 COM 组件进行故障排除? COM 组件是否有记录故障的标准方法(Windows 事件查看器中没有事件)?我可以 'inspect' 任何方式的组件吗?
我已经使用 regsvr32.exe 成功注册了该组件(除了创建一些 Windows 注册设置外,我不知道这实际上做了什么)。
马丁
这种形式的故障排除分为 2 个部分。
首先使用 SYS 内部的 procmon。 SYS internals 这显示了试图打开 COM 服务器的进程的类似 strace 的行为。
查看失败的函数调用。
接下来我将尝试在调试器中直接加载 com 控件,看看是否有任何失败
procmon 的结果将显示注册表位置和文件位置,它们是加载 com 对象的关键。
失败可能是:-
- 为一个用户安装,而不是为所有用户安装。这将无法找到命名对象
- 架构不正确。如果
prog.exe
转到64位,将无法加载32位com DLL
- 缺少依赖项。更多 DLL 可能无法加载 - 这些将显示在 procmon trace
中
- 配置数据。如果 com DLL 需要进一步的配置,那么这将显示在 procmon 的事件中,或者在调试器
的错误中
您可以在调试器中加载任何 DLL。调试符号使它更容易,但我们正试图发现错误,它进行的调用中的异常
对于这个问题的含糊不清,我深表歉意。
在将应用程序迁移到新的服务器环境期间,为应用程序公开 API 的 COM 组件 (.dll) 文件已停止工作。
有什么方法可以对 COM 组件进行故障排除? COM 组件是否有记录故障的标准方法(Windows 事件查看器中没有事件)?我可以 'inspect' 任何方式的组件吗?
我已经使用 regsvr32.exe 成功注册了该组件(除了创建一些 Windows 注册设置外,我不知道这实际上做了什么)。
马丁
这种形式的故障排除分为 2 个部分。
首先使用 SYS 内部的 procmon。 SYS internals 这显示了试图打开 COM 服务器的进程的类似 strace 的行为。
查看失败的函数调用。
接下来我将尝试在调试器中直接加载 com 控件,看看是否有任何失败
procmon 的结果将显示注册表位置和文件位置,它们是加载 com 对象的关键。
失败可能是:-
- 为一个用户安装,而不是为所有用户安装。这将无法找到命名对象
- 架构不正确。如果
prog.exe
转到64位,将无法加载32位com DLL - 缺少依赖项。更多 DLL 可能无法加载 - 这些将显示在 procmon trace 中
- 配置数据。如果 com DLL 需要进一步的配置,那么这将显示在 procmon 的事件中,或者在调试器 的错误中
您可以在调试器中加载任何 DLL。调试符号使它更容易,但我们正试图发现错误,它进行的调用中的异常