"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como iniciar executáveis ​​de C++: uma alternativa mais segura para `system()`?

Como iniciar executáveis ​​de C++: uma alternativa mais segura para `system()`?

Publicado em 2024-11-14
Navegar:155

  How to Launch Executables from C  :  A Safer Alternative to `system()`?

Lançando executáveis ​​​​de C: uma alternativa ao sistema()

Em C, iniciar um executável a partir de outro executável pode ser feito usando o sistema () funciona, mas este método apresenta preocupações de segurança e eficiência do sistema. Uma abordagem mais robusta envolve a utilização da função CreateProcess().

#include 

void startup(LPCTSTR lpApplicationName) {
   STARTUPINFO si;
   PROCESS_INFORMATION pi;

   ZeroMemory(&si, sizeof(si));
   si.cb = sizeof(si);
   ZeroMemory(&pi, sizeof(pi));

  CreateProcess(lpApplicationName, 
         argv[1], 
         NULL, 
         NULL, 
         FALSE, 
         0, 
         NULL, 
         NULL, 
         &si, 
         &pi
    );
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}

Usando CreateProcess():

  1. Defina a função startup() conforme mostrado acima.
  2. Especifique o caminho para o executável em lpApplicationName.
  3. Chame CreateProcess() para iniciar o executável.
  4. Feche o processo e os identificadores de thread do recurso limpeza.

Solução de problemas de erros:

Verifique se o caminho especificado para o executável está correto. O erro encontrado no código fornecido provavelmente se deve a um caminho inválido para "OpenFile.exe".

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3