您在電腦上安裝 Windows 7 Service Pack 1 (SP3)。安裝 Service Pack 之後,電腦可能會凍結或重新啟動。如果電腦重新啟動,您會收到類似下列在黑色畫面上顯示的錯誤訊息:
?
!! 0xc0000034 !!142/53007 (_0000000000000000.cdf-ms)
注意如果您重新啟動電腦,會收到相同的錯誤訊息。
當使用者嘗試安裝 Service Pack ,但未先重新啟動電腦完成安裝,就安裝其他更新然後才重新啟動電腦時,可能就會發生這個問題。如果使用 WSUS 時,同時安裝 Service Pack 和其他更新,也可能會發生這個問題。
在 Service Pack 安裝期間,Windows 服務功能會維持作業清單的執行。部分清單會立即執行,其他清單則是需等到系統重新啟動後才會執行。上述清單就是基本作業佇列 (Primitive Operation Queue) (POQ)。需要在重新啟動期間執行的 POQ 作業會儲存在 pending.xml 中。在執行失敗的狀況中,系統會嘗試完成執行 POQ 作業兩次。第二次嘗試執行 POQ 會失敗 (因為之前系統已完成執行了),且出現錯誤碼「0xc0000034」。Windows 考慮封鎖此階段安裝中的任何錯誤,並讓服務功能中斷電腦繼續執行。
如果您非進階使用者,且目前在 Windows 7 電腦上遇到此錯誤,請按一下以下連結,以檢視 Microsoft 網站上的修復步驟:
安裝 Windows 7 Service Pack 1 (SP1) 之後,如何解決「錯誤 0xc0000034」?
(http://windows.microsoft.com/zh-tw/windows7/why-am-i-receiving-error-0xc0000034-after-installing-windows-7-service-pack-1-sp1)
預防步驟
如果要協助避免攻擊碰上這個問題,您可以採取的步驟:
- 從所有其他更新程式套件來個別安裝 Service Pack。
- 出現提示時,請立即重新啟動系統以完成 Service Pack 安裝
如果要解決這個問題,請按照下列方法中的步驟進行。
從 Pending.xml 中刪除 POQ 項目
這個方法主要是透過建立並執行 .vbs 指令碼來解決這個問題。在您成功建立並執行 .vbs 指令碼之後,應該就可以順利完成 Windows 7 Service Pack 1 安裝。
注意
- 此 .vbs 指令碼只適用於 0xc0000034 錯誤碼,請勿將此指令碼使用於 0xc0000034 錯誤以外的問題。
- 如果您是進階使用者,我們建議您執行此方法。
- 如果要執行此方法,我們建議您使用第二部電腦和卸除式媒體裝置,例如 USB 磁碟機。
開始執行之前開始執行之前,請先找出下列項目:
- 找出可存取網際網路的第二部電腦。請使用第二部電腦建立指令碼 (.vbs) 檔案。如果要建立指令碼 (.vbs) 檔案,請從本知識庫文章中複製指令碼的文字。
- 找出卸除式媒體裝置,例如 USB 磁碟機。請將您所建立的指令碼 (.vbs) 檔案複製到卸除式媒體裝置。然後,再將指令碼 (.vbs) 檔案轉送到遇到問題的電腦。
注意如果找不到第二部電腦和卸除式媒體裝置,您可以將指令碼 (.vbs) 檔案建立在遇到問題的電腦上。如果要執行這項操作,請移至
[系統修復選項],開啟命令提示字元,然後從命令提示字元開啟
[記事本]。接著,請輸入本知識庫文章中的指令碼文字,以手動建立此指令碼 (.vbs) 檔案。然後將此指令碼 (.vbs) 檔案儲存到本機硬碟,之後,您便可以執行此指令碼以完成所有步驟。
第 1 部分:建立指令碼 (.vbs) 檔案
如果要執行這項操作,請依照下列步驟執行:
- 找出可存取網際網路的第二部電腦。
- 開啟 [記事本]。
- 將下列文字複製並貼上至「記事本」。
Dim xmlDoc, node, nodeList, fileName, backupFileName, numberOfPOQNodes
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
If Wscript.Arguments.Count = 0 Then
??? WScript.echo("Error!No XML file specified.")
Wscript.quit
End If
fileName = WScript.Arguments(0)
backupFileName = Left(fileName, InStrRev(fileName, ".")- 1) & "_backup.xml"
If Not xmlDoc.load(fileName) Then
??? WScript.echo("Failure loading XML file " & fileName & ".")
??? Wscript.quit
End If
xmlDoc.save(backupFileName)
Set nodeList = xmlDoc.documentElement.selectNodes("POQ")
numberOfPOQNodes = nodeList.Length
For Each node in nodeList
??? xmlDoc.documentElement.removeChild(node)
Next
xmlDoc.save(fileName)
Set xmlDoc = Nothing
WScript.echo(numberOfPOQNodes & " POQ nodes removed.Script completed.")
- 按一下 [檔案],然後按一下 [另存新檔]。
- 將檔案命名為 Script.vbs,並將其儲存到卸除式媒體裝置,例如 USB 磁碟機。
第 2 部分:執行指令碼 (.vbs) 檔案
注意下列步驟假設您已將指令碼 (.vbs) 檔案複製到 USB 磁碟機。如果您使用的是不同類型的卸除式媒體裝置,則步驟可能會有些許不同。
如果要執行這項操作,請依照下列步驟執行:
- 重新啟動電腦,並開始按下鍵盤上的 F8 鍵。您必須在 Windows 標誌出現之前按下 F8。如果 Windows 標誌出現,您必須再試一次,等到 Windows 登入提示出現,關機再重新啟動電腦。
注意: 如果電腦已設定為多重作業系統開機,您可以在 [開機] 功能表出現時按下 F8 鍵。
- 使用方向鍵在 [進階開機選項] 區域中選取 [修復您的電腦],然後按下 Enter。如果系統出現提示,請選取要修復的 Windows 7 安裝,然後按一下 [下一步]。
- 選取語言和鍵盤輸入方法,然後按一下 [下一步]。
- 選取使用者名稱,輸入您的密碼,然後按一下 [確定]。
- 在 [系統修復選項] 下,記下列於 [選擇修復工具] 下方文字行上的 Windows 7 磁碟機代號。
舉例來說,您可能會看見類似下列範例的畫面:
Operating system:Windows 7 on (C:)<VolumeName>
注意 在此範例中,Windows 7 的磁碟機代號是 C。
- 在 [系統修復選項] 下,按一下 [命令提示字元]。
- 將存有您先前建立的指令碼 (.vbs) 檔案的卸除式媒體裝置插入 PC。
- 在命令提示字元中,瀏覽至磁碟機及含有您先前建立的指令碼 (.vbs) 檔案的目錄。
例如,如果您先前將建立的 script.vbs 檔案儲存在 USB 磁碟機的根目錄,而且與 USB 磁碟機相關的磁碟機代號是 E 磁碟機,則您只需要在命令提示字元中輸入下列代號,然後按下 Enter 即可。
E:
注意 如果不確定哪一個磁碟機包含卸除式媒體,您可以使用 Diskpart 來顯示磁碟機清單。如果要執行 Diskpart,請依照下列步驟執行。
- 輸入 Diskpart,按下 Enter。
- 輸入 List volume,然後按下 Enter。
- 請記下包含卸除式媒體裝置 (含有您先前建立的指令碼 (.vbs) 檔案) 的磁碟機。假設您使用的是 USB 磁碟機,則磁碟機類型將列為「卸除式」。
- 如果要結束 Diskpart,請輸入 Exit,按下 Enter。
- 在命令提示字元中,輸入下列命令,然後按下 Enter:
Cscript Script.vbs <Windows _7_drive_letter>:\Windows\winsxs\pending.xml.
其中 <Windows _7_drive_letter> 是安裝 Windows 7 作業系統的磁碟機代號。
此操作將執行 Script.vbs 檔案中的指令碼。指令碼執行完成之後,您可能會看見類似下列的訊息。
2 POQ nodes removed.Script Completed
- 如果要結束命令提示字元,請輸入 Exit,然後按下 Enter。
- 重新啟動您的電腦。Service Pack 1 安裝現在應該已順利完成 。