„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > So starten Sie ausführbare Dateien sicher in C++: Warum ist CreateProcess() Ihre beste Wahl?

So starten Sie ausführbare Dateien sicher in C++: Warum ist CreateProcess() Ihre beste Wahl?

Veröffentlicht am 09.11.2024
Durchsuche:300

How to Launch Executable Files Securely in C  : Why CreateProcess() Is Your Best Choice?

Verwenden von CreateProcess() zum Starten ausführbarer Dateien

In diesem Handbuch erfahren Sie, wie Sie eine ausführbare Datei (.exe) aus einer anderen ausführbaren C-Datei öffnen.

Die Fallstricke bei der Verwendung von system()

Bevor wir uns mit der Lösung befassen, ist es wichtig, die Gefahren hervorzuheben Verwendung der Funktion system(). System() weist mehrere Nachteile auf:

  • Es ist ressourcenschonend und verlangsamt möglicherweise Ihr Programm.
  • Es untergräbt die Sicherheit, da Sie keine Kontrolle über die ausgeführten Befehle haben. Dies kann dazu führen, dass unbeabsichtigt Schadprogramme mit Administratorrechten ausgeführt werden.
  • Es wird von Antivirensoftware häufig als Sicherheitsbedrohung gekennzeichnet.

Einsatz von CreateProcess()

Stattdessen system() empfehlen wir die Verwendung der Funktion CreateProcess(). Mit dieser Funktion können Sie eine ausführbare Datei starten und so einen unabhängigen Prozess erstellen.

#include 

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

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

  CreateProcess( lpApplicationName,   // executable path
                 argv[1],        // command line
                 NULL,           // process handle not inheritable
                 NULL,           // thread handle not inheritable
                 FALSE,          // no handle inheritance
                 0,              // no creation flags
                 NULL,           // parent's environment block
                 NULL,           // parent's starting directory 
                 &si,            // STARTUPINFO structure
                 &pi             // PROCESS_INFORMATION structure
                 );

  // Close process and thread handles. 
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
}

Beheben des Fehlers

Der aufgetretene Fehler ist wahrscheinlich darauf zurückzuführen, dass Sie nicht den vollständigen Pfad der ausführbaren Datei angegeben haben. Stellen Sie sicher, dass Sie den vollständigen Pfad angeben, einschließlich des Dateinamens.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3