我们注意到 DTC 服务已停止正常工作。来自 ASP.NET 应用程序的日志:
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
at System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean& nodeNameMatches, UInt32& whereaboutsSize, CoTaskMemHandle& whereaboutsBuffer, IResourceManagerShim& resourceManagerShim)
at System.Transactions.Oletx.DtcTransactionManager.Initialize()
at System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory()
在此状态下,无法重新启动 DTC。我们注意到 Windows 日志中有一些事件,因此我们尝试了不同的解决方案。以下方法确实有帮助,但只能持续几个小时:https://technet.microsoft.com/en-us/library/cc774114(v=ws.10).aspx。DTC 重新启动,但随后出现以下事件并且问题再次出现:
Source: Microsoft-Windows-MSDTC Client
Date: 2017-03-16 09:25:19
Event ID: 4356
Task Category: MSDTC Proxy
Description:
Failed to initialize the MS DTC Communication Manager. Error Specifics: hr = 0x80070005, com\complus\dtc\dtc\cm\src\ccm.cpp:2118, CmdLine: C:\Windows\system32\msdtc.exe, Pid: 4252
再次重新启动 DTC 会导致错误,因此出现以下事件:
Source: Microsoft-Windows-MSDTC
Date: 2017-03-16 10:20:41
Event ID: 4441
Task Category: SVC
Description:
A MS DTC component has encountered an internal error. The process is being terminated. Error Specifics: DtcSystemShutdown (com\complus\dtc\dtc\msdtc\src\msdtc.cpp@2485): Shutting down with an error
Source: Microsoft-Windows-MSDTC
Date: 2017-03-16 10:20:41
Event ID: 4439
Task Category: Unknown
Description:
Failed to verify MS DTC service account information. Internal Information : msdtc_trace : File: com\complus\dtc\shared\util\security.cpp, Line: 818, VerifyAccountInfo: CService::Create failed, hr=0x80070005.
Source: Microsoft-Windows-MSDTC Client
Date: 2017-03-16 10:20:41
Event ID: 4356
Task Category: MSDTC Proxy
Description:
Failed to initialize the MS DTC Communication Manager. Error Specifics: hr = 0x80070005, com\complus\dtc\dtc\cm\src\ccm.cpp:2118, CmdLine: C:\Windows\system32\msdtc.exe, Pid: 4252
DTC 重新配置再次有所帮助,但持续时间不长。更多值得注意的事件:
Log Name: Application
Source: Microsoft-Windows-MSDTC Client
Date: 2017-03-14 12:03:27
Event ID: 4156
Task Category: CM
Description:
String message: INFORMATIONAL: Negotiate Resources returned OUT OF RESOURCES IN SSTATE_UP.
Source: Microsoft-Windows-Perflib
Date: 2017-03-15 13:58:59
Event ID: 1008
Task Category: None
Description:
The Open Procedure for service "MSDTC" in DLL "C:\Windows\system32\msdtcuiu.DLL" failed. Performance data for this service will not be available. The first four bytes (DWORD) of the Data section contains the error code.
答案1
感谢微软支持部门的 Martin Nolte 和 Feroz Khan,我们成功解决了这个问题。
确认问题与“红色箭头问题”无关。运行 dcomcnfg 打开组件服务,查看“我的电脑”上是否有“红色箭头”。
如果您在数据库服务器上看到 MSDTC 红色箭头。要纠正此问题,请按照下面提到的步骤操作(或从https://blogs.msdn.microsoft.com/asiatech/2010/02/21/how-to-troubleshoot-the-red-arrow-issue-in-component-services-i/)
验证用户组是否有权读取 下的子项
HKEY_CLASSES_ROOT\CLSID
。如果用户组没有权限读取子项,则 COM+ 系统应用程序服务可能无法启动并导致相同的“红色箭头”问题。要授予用户组读取权限,我们可以按照以下步骤操作(首先我们应该备份HKEY_CLASSES_ROOT\CLSID
):- 打开
Regedt32
,找到HKEY_CLASSES_ROOT\CLSID
- 选择
CLSID
,点击菜单栏中的安全->权限 - 在安全选项卡中,在权限列表中添加USERS,并赋予其读取权限。
- 单击“高级”按钮,选择“用此处显示的适用于子对象的条目替换所有子对象的权限条目”选项。单击“应用”。
- 打开
C:\Windows\Registration
检查每个人是否对及其子对象都有读取权限。- 确保 COM+ 系统应用程序服务处于启动状态:
MSDTC 服务应允许经过身份验证的用户查询服务状态。要检查这一点,我们可以在命令窗口中运行以下命令:
sc sdshow msdtc
如果Authenticated Users组没有对MSDTC服务对象的查询权限,这将导致大多数用户没有权限获取MSDTC服务状态,例如:
(A;;CR;;;AU)
我们需要运行此命令为Authenticated user授予足够的权限,然后重新启动DLLHOST.exe(执行此操作之前,请备份“sc sdshow msdtc”的输出信息):
sc sdset msdtc D:(A;;CCLCSWRPLOCRRC;;;S-1-2-0) (A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) (A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWLOCRRC;;;AU) (A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;CCLCSWRPLORC;;;NS)S: (AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
如果上述步骤不起作用,您必须遵循其他步骤,例如重建 COM+ 目录和消除注册表项损坏。
- 重启服务器
验证 MSDTC 服务问题是否仍然存在。如果是,请确保您没有为 MSDTC 设置组策略。
恢复默认账户:https://technet.microsoft.com/en-us/library/cc774114(v=ws.10).aspx
如果在 dcomcnfg 中将帐户设置为“网络服务”,则会设置以下注册表值
AccountName
:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security.
要检查此注册表值是否受组策略的影响,您可以执行以下步骤:
要获取所有应用的组策略,您需要下载
- 适用于 Windows 10 的远程服务器管理工具
- https://www.microsoft.com/en-us/download/details.aspx?id=45520
打开 Powershell 命令提示符并输入以下命令:
Import-Module GroupPolicy Get-GPOReport -All -ReportType Html -Path AllGPOsReport.htm
为 MSDTC 设置默认组策略
- 跑步
iisreset /restart
- 再次恢复默认帐户:https://technet.microsoft.com/en-us/library/cc774114(v=ws.10).aspx
- MSDTC 服务应正常工作
答案2
由于“HP Print and Scan Doctor”Windows 服务,我们遇到了“红色箭头”问题和无法正常运行的 MSDTC。停止该服务(并重新启动分布式事务协调器服务)后,该服务即可恢复正常运行。
另请参阅此 HP 论坛帖子:https://h30434.www3.hp.com/t5/Notebook-Operating-System-and-Recovery/COM-Unable-to-talk-to-Microsoft-Distributed-Transaction/td-p/6983012,https://h30434.www3.hp.com/t5/Notebook-Operating-System-and-Recovery/Windows-10-COM-is-unable-to-talk-to-MS-DTC-because-of-HP/td-p/6924150