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

Foi útil?

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 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 .

É 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top