System Center Update Publisher 2011 由于补丁KB2530678安装问题无法成功将自定义更新发布到WSUS上
【本文作者为APGC System Center 支持组 工程师 Winds Wu】
近期,随着System Center Update Publisher 2011(SCUP 2011)和System Center Configuration Manager 2012 beta (ConfigMgr 2012 Beta) 版本的发布,SCUP 2011无法将补丁成功发布到WSUS上的问题日趋增多。就目前的情况上来看,我们碰到的主要问题是由于.Net Framework 4.0 RTM版本的功能不稳定,导致WSUS的一个重要补丁安装不成功导致的。
在这里同大家分享该问题的排查以及解决方案,希望对大家有所帮助。
1. 在安装SCUP 2011之前,我们需要先下载安装WSUS补丁WSUS-KB2530678-x86 或WSUS-KB2530678-x64 。您可以从如下链接下载:
https://support.microsoft.com/kb/2530678。
2. 如果补丁没有安装或者安装失败,那么当你使用SCUP2011或者ConfigMgr 2012 Beta 向计算机发布定制更新时,就会在 %temp%\SCUP.log里看到下面的错误信息:
at System.IO.__Error.StreamIsClosed()
at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.Xml.XmlUtf8RawTextWriter.FlushBuffer()
at System.Xml.XmlUtf8RawTextWriter.Flush()
at System.Xml.XmlWellFormedWriter.Close()
at System.Xml.XmlWriter.Dispose(Boolean disposing)
at System.Xml.XmlWriter.System.IDisposable.Dispose()
at Microsoft.UpdateServices.Internal.BaseApi.Publisher.VerifyAndPublishPackage()
at Microsoft.UpdateServices.Internal.BaseApi.Publisher.PublishPackage(String sourcePath, String additionalSourcePath, String packageDirectoryName)
at Microsoft.UpdateServices.Internal.BaseApi.Publisher.PublishPackage(String sourcePath, String packageDirectoryName)
顺便说下,这个补丁在界面上经常显示为已成功安装即使实际上并没有成功,另外,我们并不能卸载该补丁。
3. 安装补丁KB2530678后,请查看下面信息以确保其安装成功。
(1 )WSUS数据库和WSUS控制台在同一台计算机上
a. 查看%temp%\MWusCa.log日志以确定补丁是否安装成功
b. 查看下面的文件以确保它们的版本已经更新
对于所有支持的基于X86的WSUS 3.0 SP2版本— > 这些文件都位于C:\Program Files\Update Services\Database 目录下
File name |
File version |
File size |
Date |
Time |
Platform |
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
546,728 |
24-Mar-2011 |
17:36 |
x86 |
Mwus_database_schema.sql |
Not applicable |
762,923 |
22-Mar-2011 |
18:15 |
Not applicable |
Popdb.sql |
Not applicable |
92,119 |
22-Mar-2011 |
18:15 |
Not applicable |
Wsuscertserver.exe |
7.4.7600.236 |
66,984 |
24-Mar-2011 |
17:30 |
x86 |
Wsussigndb.cer |
Not applicable |
689 |
16-Mar-2011 |
13:58 |
Not applicable |
Wsussigndb.dll |
Not applicable |
8,104 |
24-Mar-2011 |
17:30 |
x86 |
Wsussigndb.sql |
Not applicable |
269,339 |
16-Mar-2011 |
13:58 |
Not applicable |
对于所有支持的基于X64的WSUS 3.0 SP2版本— > 这些文件都位于C:\Program Files\Update Services\Database 目录下
File name |
File version |
File size |
Date |
Time |
Platform |
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
546,728 |
24-Mar-2011 |
17:36 |
x86 |
Mwus_database_schema.sql |
Not applicable |
762,923 |
23-Mar-2011 |
09:53 |
Not applicable |
Popdb.sql |
Not applicable |
92,119 |
23-Mar-2011 |
09:53 |
Not applicable |
Wsuscertserver.exe |
7.4.7600.236 |
77,224 |
24-Mar-2011 |
17:31 |
x64 |
Wsussigndb.cer |
Not applicable |
689 |
16-Mar-2011 |
13:58 |
Not applicable |
Wsussigndb.dll |
Not applicable |
8,104 |
24-Mar-2011 |
17:31 |
x86 |
Wsussigndb.sql |
Not applicable |
269,339 |
16-Mar-2011 |
13:58 |
Not applicable |
C. 同时,我们还需要查看c:\windows\assembly\gac_msil\microsoft.updateservices.baseapi\3.1.6001.1__31bf3856ad364e35\microsoft.updateservices.baseapi.dll 文件, 以确保这个DLL文件的版本号是 3.1.7600.236 ,即使我们已经在C:\Program Files\Update Services\Database 里确认过了.
*由于该文件无法通过正常的文件系统找到,您可以使用下面的方法来验证该文件的版本信息:
(a). 使用管理员权限打开命令提示符(cmd.exe)
(b). 进入如下的路径.
c:\windows\assembly\gac_msil\microsoft.updateservices.baseapi\3.1.6001.1__31bf3856ad364e35
(c). 运行如下命令,将 microsoft.updateservices.baseapi.dll 拷贝到C盘根目录下.
copy microsoft.updateservices.baseapi.dll \
(d). 在 C:\下,请检查Microsoft.updateservices.baseapi.dll的文件版本号是不是最新的。
下面是装完补丁后的版本.
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
(2 )WSUS数据库和WSUS控制台安装在两台计算机上。
a. 查看 %temp%\MWusCa.log 日志以确定补丁是否安装成功, 你可能会在日志中看到下面的记录.
Changed database context to '<WSUS Database Name>'.
b.查看下面的文件以确保它们的版本已经更新
对于所有支持的基于X86的WSUS 3.0 SP2版本— > 这些文件都位于C:\Program Files\Update Services\Database 目录下
File name |
File version |
File size |
Date |
Time |
Platform |
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
546,728 |
24-Mar-2011 |
17:36 |
x86 |
Mwus_database_schema.sql |
Not applicable |
762,923 |
22-Mar-2011 |
18:15 |
Not applicable |
Popdb.sql |
Not applicable |
92,119 |
22-Mar-2011 |
18:15 |
Not applicable |
Wsuscertserver.exe |
7.4.7600.236 |
66,984 |
24-Mar-2011 |
17:30 |
x86 |
对于所有支持的基于X64的WSUS 3.0 SP2版本— > 这些文件都位于C:\Program Files\Update Services\Database 目录下
File name |
File version |
File size |
Date |
Time |
Platform |
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
546,728 |
24-Mar-2011 |
17:36 |
x86 |
Mwus_database_schema.sql |
Not applicable |
762,923 |
23-Mar-2011 |
09:53 |
Not applicable |
Popdb.sql |
Not applicable |
92,119 |
23-Mar-2011 |
09:53 |
Not applicable |
Wsuscertserver.exe |
7.4.7600.236 |
77,224 |
24-Mar-2011 |
17:31 |
x64 |
C. 同样,我们还需要查看c:\windows\assembly\gac_msil\microsoft.updateservices.baseapi\3.1.6001.1__31bf3856ad364e35\ microsoft.updateservices.baseapi.dll 文件, 以确保这个DLL文件的版本号是 3.1.7600.236 ,即使我们已经在C:\Program Files\Update Services\Database 里确认过了.
*由于该文件无法通过正常的文件系统找到,您可以使用下面的方法来验证该文件的版本信息:
(a). 使用管理员权限打开命令提示符(cmd.exe)
(b). 进入如下的路径.
c:\windows\assembly\gac_msil\microsoft.updateservices.baseapi\3.1.6001.1__31bf3856ad364e35
(c). 运行如下命令,将 microsoft.updateservices.baseapi.dll 拷贝到C盘根目录下.
copy microsoft.updateservices.baseapi.dll \
(d). 在 C:\下,请检查Microsoft.updateservices.baseapi.dll的文件版本号是不是最新的。
下面是装完补丁后的版本.
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
4. 如果你发现在安装了补丁 2530678后,上述的DLL版本号并不正确,这是由于.NET Framework 4.0RTM版本的功能不稳定导致补丁2530678没有被成功安装。请使用下面的解决方案来解决。
a. 在SCUP 2011服务器下载并且安装如下更新。
Reliability Update 1 for the .NET Framework 4:https://support.microsoft.com/kb/2533523
b. 安装好更新后,请重启服务器。
c. 重新安装补丁2530678.
d. 确认DLL版本号:
Microsoft.updateservices.baseapi.dll |
3.1.7600.236 |
- Winds Wu
[本博文仅供参考,微软公司对其内容不作任何责任担保或权利赋予]