Come posso iniziare explorer.exe tramite C ++?
-
21-08-2019 - |
Domanda
Sto cercando di avviare a livello di codice explorer.exe ma non sto avendo alcuna fortuna.
Questo è il mio codice:
cout << pName << "died, lets restart it." << endl;
STARTUPINFO startupInfo = {0};
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION processInformation;
if(CreateProcess(pName, NULL, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupInfo, &processInformation) == 0){
cout << "Error starting " << pName << ": " << GetLastError() << endl;
}
e pName è explorer.exe
Qualcuno può dirmi che cosa sto facendo male? Ottengo il codice di errore '2', che è ERROR_FILE_NOT_FOUND
Soluzione
Il primo parametro è il nome dell'applicazione; la seconda è la linea di comando. Prova a specificare "explorer.exe" come secondo parametro.
lpApplicationName [in, optional]
Il nome del modulo da eseguire. Questo modulo può essere un basato su Windows applicazione. Può essere qualche altro tipo del modulo (ad esempio, MS-DOS o OS / 2) se il sottosistema appropriata è disponibili sul computer locale.
La stringa può specificare il percorso completo e il nome file del modulo da eseguire oppure può specificare un nome parziale. Nel caso di un nome parziale, la funzione utilizza l'unità corrente e directory corrente per completare la specifica. La funzione non lo farà utilizzare il percorso di ricerca . Questo parametro deve includere l'estensione del nome del file; nessuna estensione di default è assunto.
Altri suggerimenti
Probabilmente dovrebbe dare " ShellExecuteEx " un tentativo. Questa funzione consente di specificare un file o cartella e verb che descrive che cosa fare con esso. Se si utilizza "explore
" come verb , si aprirà Esplora risorse di Windows con il dato cartella .
E 'sorprendentemente difficile trovare informazioni rilevanti su come in modo affidabile riavvio di Windows Explorer. Su Windows a 64 bit 7/8, il metodo ShellExecute non funziona correttamente e porta a cose come la copia di file e icona sovrapposizioni essere completamente rotto.
Il modo più affidabile sembra utilizzare stdlib.h chiamata di sistema:
system("start explorer");
Se si sta tentando di spegnere e riavviare esploratore, si potrebbe desiderare di disattivare a livello di codice chiave di registro AutoRestartShell, che vi impedisce di controllare quando Explorer viene riavviato.