User32.dll或Kernel32.dll未初始化
本文說明由 CreateProcess
或 CreateProcessAsUser
可能失敗的應用程式執行的問題。
適用於: Microsoft Windows
原始 KB 編號: 184802
徵兆
由 CreateProcess
或 CreateProcessAsUser
執行的應用程式可能會失敗,而且您會收到下列其中一個錯誤訊息:
動態連結庫 <系統>\system32\user32.dll初始化失敗。 進程異常終止。 動態連結庫 <系統>\system32\kernel32.dll初始化失敗。 進程異常終止。
此外,失敗的進程會傳回結束代碼 128 或下列程式代碼:
error:ERROR_WAIT_NO_CHILDREN
原因
發生此失敗的原因如下:
執行的進程沒有與進程相關聯的視窗月臺和桌面的正確安全性存取權。
系統用完桌面堆積。
其他相關資訊
原因 1
執行的進程沒有與進程相關聯的視窗月臺和桌面的正確安全性存取權。
傳遞至
CreateProcess
或CreateProcessAsUser
指定與執行之進程相關聯的視窗月臺和桌面之 STARTUPINFO 結構的 lpDesktop 成員。 執行的進程必須具有指定視窗月臺和桌面的正確安全性存取權。原因 2
系統用完桌面堆積。
系統上的每個桌面物件都有與其相關聯的桌面堆積。 桌面物件會使用堆積來儲存功能表、勾點、字串和視窗。 在 Windows Server 2003 和 Windows XP 32 位中,系統會從全系統 48 MB 的緩衝區配置桌面堆積。 除了桌面堆積之外,印表機驅動程式和字型驅動程式也會使用此緩衝區。
桌面與視窗月台相關聯。 視窗月臺可以包含零個或多個桌面。 您可以變更下列登錄值,以變更配置給與視窗月臺相關聯之桌面的桌面堆積大小。
注意
不建議您使用 /3GB 參數。 /3GB 參數是在 Boot.ini 檔案中指定。 只有 32 位作業系統才支援 /3GB 參數。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
在 Windows Server 2003 和 Windows XP 32 位中,此登錄值的預設數據會類似下列專案(全部位於一行):
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows
SharedSection=1024,3072,512 Windows=On SubSystemType=Windows
ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off
MaxRequestThreads=16
在不同的 Windows 版本中,此登錄值的預設數據會如下所示:
適用於 Windows Vista RTM (32 位)
SharedSection=1024,3072,512
針對 Windows Vista SP1、Windows 7、Windows 8、Windows 8.1 (32 位)和 Windows Server 2008 (32 位)
SharedSection=1024,12288,512
針對 Windows Vista、Windows 7、Windows 8、Windows 8.1 (64 位)、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2 (64 位)
SharedSection=1024,20480,768
下列 SharedSection=
數值會控制桌面堆積的配置方式。 這些 SharedSection
值會以 KB 為單位指定。 桌面有個別的設定,這些設定與互動式和非互動式視窗月台相關聯。
注意
如果您變更 SharedSection
登錄中的值,您必須重新啟動系統,變更才會生效。
重要
這個章節、方法或工作包含修改登錄的步驟。 然而,不當修改登錄可能會發生嚴重的問題。 因此,請務必小心執行下列步驟。 為增加保護起見,請先備份登錄,再進行修改。 然後,如果發生問題,您就可以還原登錄。 如需備份和還原登錄的詳細資訊,請參閱如何在 Windows 中備份及還原登錄。
第一個 SharedSection
值 (1024) 是所有桌面通用的共享堆積大小。 這包括全域句柄數據表。 此數據表會保存視窗、功能表、圖示、游標等等的句柄,以及共用系統設定。 您不太可能必須變更此值。
第二SharedSection
個值是每個與互動式視窗站 WinSta0 相關聯的桌面堆積大小。 用戶物件,例如攔截、功能表、字串和視窗會耗用此桌面堆積中的記憶體。 您不太可能必須變更此值。
在互動式視窗站台中建立的每個桌面都會使用預設桌面堆積 3,072 KB。 根據預設,系統會在 Winsta0 中建立下列三個桌面:
Winlogon
預設
默認應用程式桌面將由 STARTUPINFO.lpDesktop 結構成員中指定的所有進程
Winsta0\default
使用。 當 lpDesktop 結構成員為 NULL 時,視窗月臺和桌面會繼承自父進程。 選取[允許服務與桌面啟動互動] 選項的 LocalSystem 帳戶下執行的所有服務都會使用Winsta0\Default
。 所有這些進程都會共用與默認應用程式桌面相關聯的桌面堆積。屏幕保護程式
螢幕保護程式桌面會在顯示螢幕保護程式時,於互動式視窗站臺中建立。
第三個 SharedSection 值是與非互動視窗月台相關聯的每個桌面桌面堆積大小。 如果這個值不存在,非互動式視窗月臺的桌面堆積大小會與為互動式視窗月臺指定的大小相同(也就是第二個 SharedSection 值)。
如果只有兩個 SharedSection 值存在,您可以新增第三個值來指定在非互動視窗站中建立之桌面堆積的大小。
在用戶帳戶下執行的每個服務進程,都會在服務控制管理員 (SCM) 所建立的非互動式視窗站台中接收新的桌面。 因此,在用戶帳戶下執行的每個服務都會取用第三個 SharedSection 值中指定的桌面堆積數目。 未選取 [允許服務與桌面互動] 時,在 LocalSystem 帳戶下執行的所有服務,都會在非互動式服務視窗站中共用預設桌面的桌面堆積(Service-0x0-3e7$)。
互動式和非互動式視窗站臺中使用的桌面堆積總數必須符合緩衝區。
減少第二或第三個 SharedSection 值將會增加可在對應視窗站台中建立的桌面數目。 較小的值會限制可在桌面中建立的勾點、功能表、字串和視窗數目。 另一方面,增加第二或第三個 SharedSection 值將會減少可建立的桌面數目。 不過,這也會增加可在桌面中建立的勾點、功能表、字串和視窗數目。
由於 SCM 會在非互動式視窗站台中為在用戶帳戶下執行的每個服務進程建立新的桌面,因此較大的第三個 SharedSection 值會減少可在系統上順利執行的使用者帳戶服務數目。 可以針對第二或第三個 SharedSection 值指定的最小值為 128。 任何嘗試使用較小的值都會改用 128。
當進程需要用戶物件時,User32.dll配置桌面堆積。 如果應用程式不相依於User32.dll,則不會取用桌面堆積。
注意
在 Windows Server 2003 中,當下列其中一個條件成立時,特定事件會記錄在系統記錄檔中:
如果桌面堆積已滿,則會記錄下列事件:
Event Type: Warning Event Source: Win32k Event Category: None Event ID: 243 Date: Date Time: Time User: N/A Computer: ServerName Description: A desktop heap allocation failed.
在此情況下,請增加桌面堆積大小。
如果桌面堆積總計變成全系統緩衝區大小,則會記錄下列事件:
Event Type: Warning Event Source: Win32k Event Category: None Event ID: 244 Date: Date Time: Time User: N/A Computer: ServerName Description: Failed to create a desktop due to desktop heap exhaustion.
在此情況下,請減少桌面堆積大小。
在 Windows Server 2003 中,當下列其中一個條件成立時,全系統緩衝區為 20 MB:
- 您位於終端機服務環境中。
- /3GB 參數是在 Boot.ini 檔案中指定。
適用於
- Microsoft Windows XP Professional
- Microsoft Windows XP Home Edition
- Windows Vista Ultimate
- Windows Vista Enterprise
- Windows Vista Business
- Windows Vista Home Premium
- Windows 7 Ultimate
- Windows 7 Enterprise
- Windows 7 Professional
- Windows 7 Home Premium
- Windows 8 Enterprise
- Windows 8 專業版、Windows 8
- Windows 8.1 Enterprise
- Windows 8.1 專業版
- Windows 8.1
- Microsoft Windows Server 2003 Datacenter Edition (32 位 x86)
- Microsoft Windows Server 2003 Datacenter x64 Edition
- Microsoft Windows Server 2003 Enterprise Edition (32 位 x86)
- Microsoft Windows Server 2003 企業版 x64 版本
- Microsoft Windows Server 2003 Standard Edition (32 位 x86)
- Microsoft Windows Server 2003 Standard x64 Edition
- Windows Server 2008 Datacenter
- Windows Server 2008 Enterprise
- Windows Server 2008 R2 Datacenter
- Windows Server 2008 R2 Enterprise
- Windows Server 2008 Standard
- Windows Server 2012 Datacenter
- Windows Server 2012 Standard
- Windows Server 2012 R2 Datacenter
- Windows Server 2012 R2 Standard