我们正在将应用程序从 Windows Server 2003 迁移到 Windows Server 2008 R2。我在迁移方面面临一些问题。
我在Windows Server 2008 R2中部署了许多COM+组件(32位)和DCOM组件(32位)。这些 COM+ 和 DCOM 组件是 VC++ 代码。
我在同一台服务器上部署了一个 32 位 .net 3.5 服务,它调用上面提到的 COM+ 组件。
每当我尝试启动服务时,它都不会启动并在事件日志中抛出多个错误。
我们得到的主要错误是远程过程调用失败错误**。(**远程过程调用失败。(来自 HRESULT 的异常:0x800706BE))**** 根据调试期间的观察,创建了 COM 对象,但是当调用某个方法时,会引发远程过程异常。
在 Win 2003 Server Box 中同样可以正常工作。
ERROR
第一个错误:
错误应用程序名称:dllhost.exe,版本:6.1.7600.16385,时间戳:0x4a5bc6b7
错误模块名称:KERNELBASE.dll,版本:6.1.7600.16385,时间戳:0x4a5bdbdf
异常代码:0xe06d7363
故障偏移:0x0000b727
错误进程 ID:0x8ac
错误的应用程序启动时间:0x01cb437094216ea7
错误应用程序路径: C:\Windows\SysWOW64\dllhost.exe
错误模块路径: C:\Windows\syswow64\KERNELBASE.dll
报告 ID:d25f6a31-af63-11df-8252-0050568e251b
第二个错误:
系统已调用自定义组件,但该组件已失败并生成异常。这表明自定义组件存在问题。通知该组件的开发人员发生了故障并向他们提供以下信息。
服务器应用程序 ID:{727318BC-A725-4ED6-8DDD-9DE80262D3CA}
服务器应用程序实例 ID:
{739972C1-74DA-4169-A093-32AAAA965EC9}
服务器应用程序名称:
此错误的严重性已导致进程终止。
例外:E06D7363
第三个错误:
故障桶,类型0
活动名称:APPPCRASH
回复: 不可用
出租车编号:0
问题签名:
P1:dllhost.exe
P2:6.1.7600.16385
P3:4a5bc6b7
P4:KERNELBASE.dll
P5:6.1.7600.16385
P6:4a5bdbdf
P7:e06d7363
P8:0000b727
P9:
P10:
附加的文件:
这些文件可以在这里找到:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_dllhost.exe_58c2666ce94b9901a2cc454f2e8cd8cc5742421_085d298c
分析符号:
重新检查解决方案:0
报告 ID:d25f6a31-af63-11df-8252-0050568e251b
第四个错误:
故障桶,类型0
活动名称:APPPCRASH
回复: 不可用
出租车编号:0
问题签名:
P1:dllhost.exe
P2:6.1.7600.16385
P3:4a5bc6b7
P4:KERNELBASE.dll
P5:6.1.7600.16385
P6:4a5bdbdf
P7:e06d7363
P8:0000b727
P9:
P10:
附加的文件:
这些文件可以在这里找到:
C:\ProgramData\Microsoft\Windows\WER\ReportQueue\AppCrash_dllhost.exe_58c2666ce94b9901a2cc454f2e8cd8cc5742421_085d298c
分析符号:
重新检查解决方案:0
报告 ID:d25f6a31-af63-11df-8252-0050568e251b
报告状态:0
第5个错误:
服务无法启动。 System.Runtime.InteropServices.COMException (0x800706BE):远程过程调用失败。 (HRESULT 异常:0x800706BE)
我们根据分析检查了以下内容:
1. 权限问题- 检查Everyone、经过身份验证的用户、IWAM_ServerName 和IUSR_ServerName 是否具有完全控制权。在论坛中看到他们应该对某些系统文件夹具有 NTFS 读取/执行权限。不知道如何检查这个。
2.DLL地狱问题- 检查了注册,一切似乎都很好。
3. 处理“位数”问题- 检查注册表,所有条目均位于 WoW6432 下,所有应用程序组件均为 32 位。没有对 64 位组件的进程内调用。还使用 COM 来实现 32 个应用程序。
4. 防火墙问题- 该服务与 COM 组件位于同一台机器上。我们是否应该更改一些与 MSTDC 安全、高级防火墙配置相关的设置(例如启用 COM+ 入站)?我们不确定,因为我们是第一次配置服务器。
- 启用“运行 32 位应用程序”复选框
但以上都没有帮助。
此外,我们正在尝试使用示例组件来重现该问题。我们创建了一个 .NET 组件并将其部署在 COM+ 中。尝试通过 VB 脚本和 C# 控制台应用程序访问它,它在 Windows 2003 框中工作正常。同样的情况在 Windows 2008 Server 中不起作用。我们没有收到 RPC 错误,而是收到以下错误:
vb脚本错误:800a01ad activex 组件无法创建对象
.net 客户端调用 com :类未注册:HRESULT 0x80040154(REGDB_E_CLASSNOTREG)
经过分析发现,这些问题可能是由于权限问题、dll hell或者进程‘bitness’问题。
如果有人可以帮助我们解决这个问题,那就太好了。
谢谢,
维杰