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

È stato utile?

Soluzione

Il primo parametro è il nome dell'applicazione; la seconda è la linea di comando. Prova a specificare "explorer.exe" come secondo parametro.

MSDN articolo :

  

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top