Come correggere gli errori di runtime di Windows Visual C++

Come correggere gli errori di runtime di Windows Visual C++

Le librerie condivise in Windows rendono la programmazione molto più efficiente per il programmatore che non ha bisogno di reinventare la ruota ogni volta che deve eseguire un'attività comune. Semplificano inoltre l'inserimento di falle di sicurezza nel codice condiviso quando vengono trovate, poiché devono essere applicate patch in meno punti e non richiedono la ricompilazione di ogni applicazione.





Nonostante questi aspetti positivi, possono porre i propri problemi quando si tenta di risolvere la causa principale dei messaggi di errore che possono generare.





La domanda del nostro lettore:

Come posso risolvere un problema C:Windowsexplorer.exe di Windows Vista a 32 bit su un Dell Inspiron 530?





Dopo aver fatto clic sul pulsante OK nella finestra di dialogo mostrata nello screenshot, lo schermo si oscura e torna alla normale esecuzione, ma non mi consentirà di accedere all'unità C, D e, a volte, all'E quando tento di accedervi da Risorse del computer.

In esecuzione sfc /scannow non trova errori. Ho scaricato gli aggiornamenti da entrambi i siti Web Dell e Microsoft cercando di risolvere questo problema. Ho anche installato Microsoft Visual C++ 2010 Redistributable Package (x86). Il PC è completamente aggiornato secondo Windows Update.



La risposta di Bruce:

Nota: le discussioni su Esplora risorse in Windows 7 e versioni precedenti si applicano anche a Esplora file in Windows 8 e versioni successive. Se c'è una differenza notevole tra di loro, sarà esplicitamente indicato.

La shell di Windows

Windows Explorer è la shell e viene eseguito come il processo explorer.exe come visto in Task Manager o Process Explorer di Sysinternals. Come molti altri programmi Windows, tutte le funzionalità fornite dalla shell non sono incorporate in quel singolo file eseguibile. Esistono dozzine di altri file EXE e DLL utilizzati per implementare fogli di proprietà, gestori di proprietà, gestori di anteprime, menu contestuali e molti altri elementi che utilizzi in Esplora risorse ogni giorno.





Shell estensibile

Le estensioni della shell consentono ai programmatori di aggiungere facilmente funzionalità a Windows Explorer scrivendo una DLL per eseguire l'attività e registrando la DLL con il sistema operativo, in modo che Explorer sappia dove trovare il codice per eseguire l'attività. Per esempio, 7-Zip aggiunge un sottomenu al menu contestuale standard, fornendo un rapido accesso alle attività di gestione dell'archivio, Hard Disk Sentinel aggiunge sovrapposizioni di icone alle icone dell'unità standard, in modo da poter vedere lo stato di integrità dell'unità a colpo d'occhio e HashTab aggiunge una nuova finestra delle proprietà, per calcolare e visualizzare gli hash del file selezionato.

Molte di queste estensioni della shell sono implementate come server COM (Component Object Model) in-process. Ciò significa che quando un processo, in questo caso Windows Explorer, utilizza l'estensione, non apparirà in Task Manager o Process Explorer come un processo in esecuzione separato con il proprio identificatore di processo (PID). Invece, è in esecuzione all'interno del processo explorer.exe chiamante.





Processo a istanza singola predefinito

Windows Explorer è scritto per essere in grado di funzionare come due processi separati, ma, nella sua configurazione predefinita, eseguirà solo una singola istanza. Quando viene eseguito per la prima volta come parte del processo di avvio, crea l'ambiente desktop di Windows. L'esecuzione di nuovo crea un nuovo thread nel processo esistente, che visualizza la familiare finestra di gestione dei file, invece di avviare un nuovo processo.

Questo comportamento consente un footprint di memoria ridotto, ma può anche apportare una piccola svolta durante la risoluzione dei problemi. Un errore critico o un'eccezione non gestita nel codice in esecuzione nel processo explorer.exe, inclusi i server in-process forniti dalle DLL, causerà l'interruzione dell'intero ambiente desktop.

Nella maggior parte dei casi, il processo desktop verrà riavviato automaticamente. Se non si riavvia, dovresti comunque essere in grado di utilizzare Ctrl-Shift-Esc per visualizzare il Task Manager. Da lì, vai a File > Nuova attività (Esegui...) > genere explorer.exe > OK per riavviare il processo.

Questo può essere evitato con una semplice modifica. Aprire Esplora risorse > Organizza > Opzioni cartella e ricerca in Vista/7. Per Windows 8 e versioni successive, apri Esplora file > Visualizza > Opzioni > Cambia cartella e opzioni di ricerca . Seleziona il Visualizza scheda e controlla Avvia le finestre delle cartelle in un processo separato .

cosa significa questa emoji?

La modifica di questa impostazione isola il processo del desktop da tutte le altre finestre di Esplora risorse aperte. Se una di queste finestre di Explorer si blocca, il desktop rimarrà intatto.

Libreria di runtime di Microsoft Visual C++ (CRT)

La libreria di runtime di Microsoft Visual C++ fornisce routine per la programmazione di Windows che automatizzano molte attività, come input/output, manipolazione di file, allocazione della memoria, chiamate di sistema e molte altre.

Ogni installazione di Windows avrà almeno due versioni diverse di CRT installate. Una macchina Vista SP2 appena creata tramite Windows 10 avrà sia la versione 8.0 che 9.0 (rispettivamente VC 2005 e VC 2008,). Quando viene installato software aggiuntivo, può includere anche versioni più recenti dei runtime, a seconda della versione di Visual C++ utilizzata per creare il programma o uno dei suoi componenti.

Errori di runtime

Quando si incontra un errore o un'eccezione in un pezzo di codice, idealmente verrà gestito il prima possibile nella procedura attualmente in esecuzione e verrà corretto o consentirà un errore normale. Se l'errore non viene gestito localmente, viene passato al codice che ha chiamato il codice attualmente in esecuzione e il processo continua finché non viene gestita l'eccezione. Se completa la sua corsa in cima alla catena e non viene ancora gestito, genererà un errore di runtime come visto sopra.

Quando l'utente fa clic sul pulsante OK, il processo verrà terminato. Se il programma ha un comportamento di errore definito, come servizi critici, o il suo stato di esecuzione è monitorato da un altro processo, potrebbe essere rigenerato automaticamente. Questo è ciò che sta accadendo in questo caso. Lo schermo si oscura quando il processo explorer.exe viene terminato, quindi il desktop torna quando il processo explorer.exe viene riavviato.

Sebbene il messaggio di errore sopra indicato indichi chiaramente che proviene dal processo explorer.exe, non è probabile che sia un problema con explorer.exe stesso. È molto più probabile che il colpevole sia altrove, ad esempio un'estensione di terze parti utilizzata da Explorer.

altre considerazioni

Con la descrizione del problema del nostro lettore sopra, ci sono un paio di elementi aggiuntivi che dobbiamo prendere in considerazione:

  • Al momento dell'arresto anomalo, Explorer stava tentando, ma non riusciva, di popolare la visualizzazione elenco.
  • L'impossibilità di accedere alle unità dopo che il desktop è stato rigenerato, potrebbe indicare che un altro processo ha uno o più dispositivi bloccati, impedendo così l'accesso dal processo explorer.exe appena creato.
  • In esecuzione sfc /scannow e ottenere un buono stato di salute, rilascia le risorse protette di Windows in fondo all'elenco per essere prese in considerazione. Altre cause sono molto più probabili.

Le correzioni sono in

In questo caso particolare, ci sono tre aree in cui cercherei una soluzione. Il primo riguarda il servizio di ricerca di Windows, il secondo riguarda l'analisi delle estensioni della shell e l'ultimo sarebbero gli stessi ridistribuibili VC++.

Poiché lo screenshot originale mostra l'arresto anomalo che si verifica quando Explorer tenta di popolare la visualizzazione elenco, è possibile che il servizio di ricerca di Windows stia bloccando l'accesso alle risorse richieste. L'ho visto accadere quando il servizio si arresta in modo anomalo e non ha i parametri di riavvio corretti.

premere Win+R > genere services.msc > OK per avviare la console di gestione con il modulo servizi. Scorri verso il basso fino a Ricerca di Windows e fai doppio clic sulla voce per aprire la finestra di dialogo Proprietà. Assicurati che le impostazioni nella scheda Ripristino corrispondano all'immagine sottostante.

Il problema più comune è l'impostazione 'Riavvia il servizio dopo:'. Questo errore si verifica frequentemente quando questa impostazione è diversa da zero.

Estensioni di shell problematiche

Scarica ShellExView di Nirsoft per la tua architettura di sistema (x86 o x64), installalo ed eseguilo. Ci vorrà un po' di tempo per esaminare il sistema e riempire la tabella con i dati. Scorri fino alla colonna CLSID Modified Time e fai clic sull'intestazione per ordinare in questo campo. Se desideri escludere i moduli forniti da Microsoft, puoi andare su Opzioni > Nascondi tutte le estensioni Microsoft . Per coloro che utilizzano una versione di Windows a 64 bit, potresti anche voler mostrare le estensioni a 32 bit sul sistema andando su Opzioni > Mostra estensioni shell a 32 bit .

Cerca le estensioni che sono state aggiunte poco prima dell'inizio dei sintomi. Seleziona uno o più e premi F7 o vai a File > Disabilita elementi selezionati , oppure fai clic sull'icona del LED rosso nella barra degli strumenti. Idealmente, questo dovrebbe essere fatto uno alla volta.

Fai un test per vedere se i sintomi persistono. In tal caso, è possibile riattivare l'estensione o le estensioni precedentemente disabilitate utilizzando F8 , File > Abilita elementi selezionati o l'icona LED verde della barra degli strumenti. Da qui, disabilita un'estensione diversa e ripeti il ​​processo di test finché non trovi quella che causa il problema.

Ripara/Reinstalla VC++ Redistributables

Uso questo come ultima risorsa, se solo un programma sta emettendo errori. Se hai più programmi che hanno problemi con gli errori di runtime di VC++, potresti provare prima questo.

Quando guardo i programmi installati sul mio sistema ( Pannello di controllo > Programmi e funzionalità ), mostra tutte le versioni dei pacchetti ridistribuibili (e alcuni dei loro aggiornamenti) che vanno dalla versione 8 alla versione 12 (VC++ 2005 fino a VC++ 2013). Li ho installati a causa degli strumenti di programmazione Microsoft che utilizzo. La maggior parte degli utenti non avrà tutti questi.

Puoi trovare il download più recenti per le versioni supportate di Visual C++ da Microsoft. Per i nostri scopi qui, devi preoccuparti solo di quelli che sono etichettati come pacchetti 'ridistribuibili'. I collegamenti classificati come service pack sono per gli strumenti di programmazione, non semplicemente per i runtime. Avrai bisogno solo di quelli che sono attualmente elencati nei programmi installati sul tuo sistema. L'installazione di altre versioni non aiuta in questo caso. Gli utenti di sistemi operativi a 64 bit potrebbero aver bisogno di entrambe le versioni x86 e x64 di CRT.

Windows Update verifica se sul computer sono installati gli aggiornamenti più recenti per questi pacchetti, ma non verifica che sia installato correttamente e che non sia stato danneggiato. Gli installatori possono verificare che tutti i file di runtime siano corretti e che tutte le voci di registro siano corrette.

Dopo aver scaricato i programmi di installazione appropriati, eseguirli sul sistema. Le versioni 2005 ti chiederanno di accettare un contratto di licenza prima di reinstallare il pacchetto. Tutti gli altri hanno una GUI che ti chiederà se vuoi riparare o disinstallare l'installazione esistente. Nella maggior parte dei casi, un'operazione di riparazione risolverà eventuali problemi.

Se vuoi provare il metodo più estremo, puoi disinstallare i runtime, riavviare la macchina, quindi reinstallarli. Non consiglio questo metodo con i runtime 2005 e 2008. Senza di essi, Windows genererà molti errori e una grande quantità di funzionalità non sarà disponibile al riavvio.

Conclusione

Con un po' di osservazione, un po' di tentativi ed errori e una certa comprensione di come gli errori vengono generati dai runtime sul sistema, i problemi del software possono essere trovati e risolti senza ricorrere a complicati strumenti di debug e log.

Hai riscontrato errori di runtime sul tuo sistema? Cosa era necessario per risolverli? Fammi sapere nei commenti qui sotto.

Condividere Condividere Tweet E-mail Ecco perché l'FBI ha emesso un avviso per il ransomware Hive

L'FBI ha emesso un avvertimento su un ceppo di ransomware particolarmente dannoso. Ecco perché devi prestare particolare attenzione al ransomware Hive.

Leggi Avanti
Argomenti correlati
  • finestre
  • La tecnologia spiegata
  • Chiedi agli esperti
  • Windows Explorer
  • finestre
  • Esplora file
  • Ricerca di Windows
  • Risoluzione dei problemi
Circa l'autore Bruce Epper(13 articoli pubblicati)

Bruce gioca con l'elettronica dagli anni '70, i computer dai primi anni '80 e risponde con precisione a domande sulla tecnologia che non ha usato né visto per tutto il tempo. Si infastidisce anche tentando di suonare la chitarra.

Altro da Bruce Epper

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti