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 4https://support.microsoft.com/kb/2533523

b. 安装好更新后,请重启服务器。

c. 重新安装补丁2530678.

d. 确认DLL版本号:

Microsoft.updateservices.baseapi.dll

3.1.7600.236

- Winds Wu 

 

[本博文仅供参考,微软公司对其内容不作任何责任担保或权利赋予]