Pergunta

Estou tentando descobrir por que um plug-in NPAPI que escrevi, que funciona bem em termos de execução de operações acionadas por meio de chamadas Javascipt, não pode usar CreateProcess() ou ShellExecute() para iniciar um aplicativo a partir de um caminho especificado por meio da chamada Javascript.

Aparentemente, posso usar qualquer um desses métodos e eles retornam sucesso, ou seja,nenhum código de erro.Mas o aplicativo simplesmente não inicia.Tentei modificar os parâmetros usados ​​ao chamá-los, para criar um novo grupo de processos, etc.Mas aparentemente sem efeito.

Eu sei que isso pode parecer um risco à segurança, mas para o propósito específico que desejamos usar, não deve ser um problema.

Usando Windows XP Pro SP3, Firefox 3.5 e o seguinte código:

ZeroMemory( &si, sizeof(si) ); 
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) ); 
if( CreateProcess( NULL, wFileName, NULL, NULL, FALSE, 
                  CREATE_NEW_CONSOLE | CREATE_NEW_PROCESS_GROUP, 
                  NULL, NULL, &si, &pi ) )
{ 
    bSuccess = true; // Close process and thread handles.      
    WaitForSingleObject(pi.hProcess,INFINITE); 
    CloseHandle( pi.hProcess ); 
    CloseHandle( pi.hThread ); 
}
Foi útil?

Solução

Sem nenhum código (snippet) para analisar, é realmente difícil dar dicas valiosas:

Não vejo por que isso não deveria funcionar no XP.Você tem certeza de que as chamadas CreateProcess()/ShellExecute() foram bem-sucedidas?

Coisas para tentar:

  • A chamada ShellExecute() também será bem-sucedida se você passar um caminho inválido?

  • O que acontece se você usar um caminho codificado (por exemplo,o caminho para notepad.exe, um caminho sem espaços, etc.)?

  • Verifique com ProcessMonitor (antigo filemon) se o arquivo executável do aplicativo que você está tentando iniciar foi acessado.

Talvez o executável não seja iniciado porque uma DLL dependente não foi encontrada.
Tenha em mente que o diretório de trabalho/atual é o diretório do executável do navegador ao iniciar o aplicativo a partir de um plugin.
Portanto, as DLLs localizadas na pasta do aplicativo podem não ser encontradas.

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