Microsoft SQL Server 2005 安装过程中出现错误Unknown error 0x80131501
在安装SQL SERVER 2005 STD时,突然出现如下问题:
无法在 COM+ 目录中安装和配置程序集 C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll。错误: -2146233087
错误消息: Unknown error 0x80131501
真正测试成功的:
【解决办法】
这时候可以暂停安装,不要点击中止、忽略,也不要点击取消
按以下步骤
1.删除注册表中的键:
?HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
? HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
? HKEY_CLASSES_ROOT\CID
2、使用cmd执行 停止MSDTC服务:net stop msdtc
3、使用cmd执行 卸载MSDTC服务:msdtc -uninstall
4、使用cmd执行 重新安装MSDTC服务:msdtc -install
点击重试就可以继续安装了。
================================================
手工注册Microsoft.SqlServer.MSMQTask.dll
使用regsvcs.exe应用程序工具注册.NET服务
使用cmd执行过程如下:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>regsvcs.exe “C:\Program Files\Micr
osoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll”
Microsoft(R) .NET Framework 服务安装实用工具版本 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
出现下列安装错误:
1: 要执行此任务,您必须具有管理凭据。请与您的系统管理员联系以获得帮助。
2: 注册程序集“Microsoft.SqlServer.MSMQTask, Version=9.0.242.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91”失败。
3: 对注册表项“HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.
DataFileMessage”的访问被拒绝。
分析结果:
这看起来是由于当前Windows用户在该注册表键值上没有足够的权限造成的。经过研究类似案例,在某些情况下,即使是Administrators组的用户也可能出现对这些键值没有Full Control的情况。需要确认一下在这些注册表值上,Administrators组用户是否有Full Control。在注册表中右键点击注册表值->选择权限来查看及改变该值上的权限设置。如果权限设置都正确的话,可以试着抓一个RegMon trace来看到底是不是注册表键值的权限问题导致这个错误。
看来问题终于找到了。
六.监控注册表
1. 运行RegMon工具,通过菜单Options->Filter中设置Include list,把Regsvcs.exe加入Include list中。
2. 执行regsvcs.exe “C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll”
3. 在Regsvcs.exe执行失败停止后,保存RegMon生成的log。
分析RegMon Trace。定位问题如下:
5484 17.98829079 RegSvcs.exe:3404 OpenKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask ACCESS DENIED NBCN-ZZ\Administrator
5488 17.98927116 RegSvcs.exe:3404 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask ACCESS DENIED NBCN-ZZ\Administrator
5489 17.98955727 RegSvcs.exe:3404 CreateKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask ACCESS DENIED NBCN-ZZ\Administrator
6431 19.89454460 RegSvcs.exe:3404 OpenKey HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask ACCESS DENIED NBCN-ZZ\Administrator
以上其实就是我一开始使用RegMon 时应该发现的问题,结果到现在才发现。
从这几条记录来看,问题是对注册表值HKCR\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask的权限问题。而RegSvcs进程在遇到这些权限问题之后,并没有马上终止,还有一些别的注册表活动。我查看了注册表HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.
DataFileMessage项的权限,Administrators组没有“完全控制”和“读取”权限,对其进行授权。重新运行注册,结果又报另外的注册表项没有权限,对其进行添加,直到注册成功,以下是输出结果。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>regsvcs.exe “C:\Program Files\Micr
osoft SQL Server\90\DTS\Tasks\Microsoft.SqlServer.MSMQTask.dll”
Microsoft(R) .NET Framework 服务安装实用工具版本 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
正在自动将“Microsoft.SqlServer.ManagedDTS, Version=9.0.242.0, Culture=neutral,
PublicKeyToken=89845dcd8080cc91”导出为“C:\WINDOWS\assembly\GAC_MSIL\Microsoft.
SqlServer.ManagedDTS\9.0.242.0__89845dcd8080cc91\Microsoft.SqlServer.ManagedDTS.
tlb”。
警告: 程序集未声明 ApplicationAccessControl 属性。默认情况下启用应用程序安全性。
已安装的程序集:
程序集: C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.Sql
Server.MSMQTask.dll
应用程序: Microsoft.SqlServer.MSMQTask
TypeLib: C:\Program Files\Microsoft SQL Server\90\DTS\Tasks\Microsoft.Sq
lServer.MSMQTask.tlb
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>
修改授权的相关注册表项如下:
HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.MessageQueueTask
HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.EncryptionAlgorithmWrapper
HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.ServCompMQTask
HKEY_CLASSES_ROOT\Microsoft.SqlServer.Dts.Tasks.MessageQueueTask.Formatter
再次运行“dcomcnfg”,打开系统组件服务。展开控制台根目录->组件服务->计算机->我的电脑->COM+应用程序节点,发现Microsoft.SqlServer.MSMQTask节点,该COM+服务已经安装成功。