Forse questo post potrà essere utile a qualcuno..
(Di certo..se stai leggendo .. molto probabilmente ti servirà..)
Da tempo avevo un problema piuttosto strano:
dopo un tot di giorni di uptime del mio Windows XP e dopo un uso piuttosto intensivo dello stesso .. avendo molte finestre (in senso stretto) aperte .. a volte accadeva che non mi aprisse più nulla o addirittura le finestre
venivano ‘disegnate’ in modo incompleto (explorer con menu incompleti..barre mancanti..ecc)
immaginavo che il problema risiedesse nella memoria, ma avendo 2,5GB di ram non capivo come mai si verificasse il problema anche quando utilizzati ne risultavano appena 600M.
Da poco nel mio registro sono comparsi (grazie a Dio) degli errori quando si verificava questo.
Popup dell’applicazione: dwwin.exe – Errore di applicazione : Applicazione non correttamente inizializzata (0xc0000142). Fare clic su OK per chiudere l’applicazione.
In un sistema con lingua inglese apparirebbe in questo modo:
“The application failed to initialize properly (0xc0000142). Click on OK to terminate the application.”
Grazie a ..Google sono riuscito a risalire al problema e a sistemarlo grazie a questo post[*] che mi ha fatto capire tante cose.
ecco una breve traduzione di ciò che più ci interessa:
Ogni oggetto desktop ha un singolo desktop heap associato. Il desktop heap conserva alcuni oggetti user come finestre, menu e hooks. Quando un’applicazione richiede un oggetto user, vengono effettuate delle chiamate a funzioni di user32.dll per allocare questi oggetti.
Se un applicazione non dipende da user32.dll ovviamente non consumerà memoria nel desktop heap. Osserviamo come un applicazione arriva ad usare il desktop heap:
1. un applicazione ha bisgno di creare una finestra, chiama CreateWindowEx in user32.dll
2. User32.dll fa una chiamata di sistema in kernel mode e finisce in win32k.sys
3. Win32k.sys alloca l’oggetto finestra dal desktop heap
4. Un handle della finestra (un HWND) è tornato al chiamante
4. L’applicazione e altri processi nella stessa sessione possono riferirsi a quest’oggetto finestra attraverso il suo HWND
Visto che user32.dll necessita di spazio nel desktop heap per funzionare correttamente, un esaurimento dell’heap genererà un errore 0xc00000142 (STATUS_DLL_INIT_FAILED) e il programma da voi lanciato non si aprirà restituendo (a volte si a volte no) il messaggio di errore in oggetto (se non c’è proprio spazio nell’heap non si avrà neanche la fortuna di potere vedere la finestra dell’errore..perchè non ci sarà spazio neanche per lei…)
Il problema sembra quindi dipendere dal fatto che saturo saturavo il desktop heap.
Aumentando la porzione di memoria da dedicare all’heap (Windows SharedSection=1024,4096,512) sono riuscito a risolvere.
Per assicurarsi che sia proprio questa la causa del vostro problema usate dheapmon lo trovate nella pagina dei tools di debug Microsoft
Nota:
“For many applications 3072K is too high, although MS recommend 512 K (in Q142676) for many applications this is too low.
512 K will support approximately 2,500 windows, menus, pens, icons, etc.
1024 K will support approximately 5,000 windows, menus, pens, icons, etc.
3072 K will support approximately 15,000 windows, menus, pens, icons, etc. “
[da: http://www.ss64.com/orasyntax/desktopheap.html]
[*] Vi consiglio vivamente comunque di leggere il post linkato sopra per capire meglio cosa si fa quando si va a cambiare questo valore e cosa cambia nel vostro sistema.


Anche a me capita la stessa cosa (anche se spesso con poche finestre aperte… e senza particolari problemi grafici; semplicemente si blocca un pò tutto e compare l’errore 142 qualsiasi exe tento di aprire). Spero di aver risolto aumentando lo spazio di desktop heap, anche se dal dheapmon non risultava particolarmente intasato.. al massimo c’era un desktop di un servizio utilizzato al 17%.
In ogni caso ho imparato molte cose, mi è stato davvero utile questo post!!!
Grazie dell’articolo!
Ciao
praticamente stavo aprendo un programma che avevo scaricato,ma quando lo provavo ad aprire mi appariva la cartella ” applicazione non corettamente inizializzata (0xc0000135). cosa devo fare???
ciao, sono capitato qui perchè anche io ho avuto il messaggio di errore: “Applicazione non correttamente inizializzata (0xc150004) ecc…” ho letto il tuo post che è davvero ottimo, ma non sono riuscito a capire questo pezzo: “Aumentando la porzione di memoria da dedicare all’heap (Windows SharedSection=1024,4096,512) sono riuscito a risolvere.” … come si fa a aumentare la porzione di memoria da dedicare allo heap?
Curiosità;cercando sul web come fare ad umentare la porzione di memoria sono entrato in questa pagina http://forum.egcommunity.it/showthread.php?t=31117 ..praticamente è il tuo articolo!!