Como posso começar o explorer.exe via C ++?
-
21-08-2019 - |
Pergunta
Eu estou tentando programaticamente iniciar explorer.exe mas eu não estou tendo nenhuma sorte.
Este é meu código:
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
Alguém pode me dizer o que estou fazendo de errado? Eu obter o código de erro '2', que é ERROR_FILE_NOT_FOUND
Solução
O primeiro parâmetro é o nome do aplicativo; o segundo é a linha de comando. Tente especificar "explorer.exe" como o segundo parâmetro.
Veja este MSDN artigo :
lpApplicationName [in, opcional]
O nome do módulo a ser executado. Este módulo pode ser um baseado em Windows inscrição. Pode ser algum outro tipo de módulo (por exemplo, MS-DOS ou OS / 2) se o subsistema apropriado é disponível no computador local.
A cadeia pode especificar o caminho completo e o nome do módulo de arquivo para executar ou pode especificar um nome parcial. No no caso de um nome parcial, o função usa a unidade atual e diretório atual para completar a especificação. A função não será usar o caminho de pesquisa . este parâmetro deve incluir a extensão do arquivo; sem extensão padrão é assumido.
Outras dicas
Você provavelmente deve dar " ShellExecuteEx " uma tentativa. Esta função permite que você especifique um arquivo ou pasta ??em> e verbo que descreve o que fazer com ele. Se você usar "explore
" como o verbo , que irá abrir o Windows Explorer com o dado pasta ??em>.
É surpreendentemente difícil encontrar informações relevantes sobre como confiável windows explorer reinício. Em 64-bit Windows 7/8, o método ShellExecute não funciona corretamente e leva a coisas tais como arquivo copiando e sobreposições de ícones sendo completamente quebrado.
A maneira mais confiável parece usar stdlib.h chamada de sistema:
system("start explorer");
Se você está tentando desligar e reiniciar Explorer, você pode querer programaticamente desactivar chave de registro AutoRestartShell, que o impede de controlar quando explorador é reiniciado.