web-dev-qa-db-fra.com

Comment ouvrir un fichier .exe à partir d'un autre fichier C++ .exe?

Ce que je veux faire, c'est ouvrir un fichier .exe à partir d'un autre fichier .exe. Je ne sais vraiment pas comment faire cela, alors j'ai cherché sur Internet. J'ai essayé quelques méthodes suggérées sur Internet, mais cela n'a pas fonctionné.

Voici mon code:

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
    system ("OpenFile.exe");
    system ("pause");
    return 0;
}

Lorsque je l'exécute dans DEV C++, il ne se compile pas et j'obtiens une erreur. Quelqu'un peut-il m'aider s'il vous plaît?

28
S.Y

Vous devriez toujours éviter d'utiliser system() car

  • C'est une ressource lourde 
  • Cela met en échec la sécurité - vous ne savez pas que c'est une commande valide ou vous faites la même chose sur tous les systèmes, vous pouvez même démarrer des programmes que vous n'aviez pas l'intention de démarrer .Le danger est que exécuter directement un programme, il obtient les mêmes privilèges que votre programme - ce qui signifie que si, par exemple, vous exécutez en tant qu'administrateur système, le programme malveillant que vous venez d'exécuter par inadvertance s'exécute également en tant qu'administrateur système. Si cela ne vous fait pas peur idiot, vérifiez votre Pulse.
  • Les programmes anti-virus le détestent, votre programme pourrait être identifié comme un virus.

Vous devriez utiliser CreateProcess () .

Vous pouvez utiliser Createprocess () pour simplement démarrer un fichier .exe et en créer un nouveau processus . L'application sera exécutée indépendamment de l'application appelante.

Voici un exemple que j'ai utilisé dans l'un de mes projets:

#include <windows.h>

VOID startup(LPCTSTR lpApplicationName)
{
   // additional information
   STARTUPINFO si;     
   PROCESS_INFORMATION pi;

   // set the size of the structures
   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );

  // start the program up
  CreateProcess( lpApplicationName,   // the path
    argv[1],        // Command line
    NULL,           // Process handle not inheritable
    NULL,           // Thread handle not inheritable
    FALSE,          // Set handle inheritance to FALSE
    0,              // No creation flags
    NULL,           // Use parent's environment block
    NULL,           // Use parent's starting directory 
    &si,            // Pointer to STARTUPINFO structure
    &pi             // Pointer to PROCESS_INFORMATION structure (removed extra parentheses)
    );
    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );
}

EDIT: L'erreur que vous obtenez est parce que vous devez spécifier le chemin du fichier .exe et pas seulement le nom. Openfile.exe n'existe probablement pas.

63
Jona

J'ai eu beaucoup de succès avec ça:

#include <iostream>
#include <windows.h>

int main() {
    ShellExecute(NULL, "open", "path\\to\\file.exe", NULL, NULL, SW_SHOWDEFAULT);
}

Si vous êtes intéressé, la documentation complète est ici: 

http://msdn.Microsoft.com/en-us/library/bb762153(VS.85).aspx .

14
Morpheus13

Essaye ça:

#include <windows.h>

int main ()

{
    system ("start notepad.exe") // As an example. Change [notepad] to any executable file //

    return 0 ;
}
3
ILys Hdm

Vous obtenez cette erreur parce que vous ne donnez pas le chemin complet. (C:\Utilisateurs ...\fichier.exe) Si vous souhaitez supprimer cette erreur, indiquez le chemin complet ou copiez cette application (que vous souhaitez ouvrir) dans le dossier où se trouve votre projet (.exe). /enregistré.

#include <windows.h>
using namespace std;
int main()
{
  system ("start C:\\Users\\Folder\\chrome.exe https://www.stackoverflow.com"); //for opening stackoverflow through google chrome , if chorme.exe is in that folder..
  return 0;
}
0
udit043

Indiquez le chemin complet du fichier 'openfile.exe' N'oubliez pas de placer une barre oblique '/' dans le chemin tel que C:/users/username/etc .... Au lieu de qui utilisent c:\Users\nom d'utilisateur\etc .__ (pour Windows)

Peut-être que cela vous aidera

0
Sanjeev prasad