Ermitteln Sie den übergeordneten Prozess der aktuellen App

8

Ich habe dieses Dienstprogramm (exe) geschrieben, das innerhalb dieser Host-Anwendung aufgerufen werden kann. Und ich würde es vorziehen, dass das Dienstprogramm nur von der Host-Anwendung aufgerufen werden kann. Wird es von außen oder von einem anderen Host ausgeführt, sollte das Dienstprogramm sofort beendet werden.

Gibt es eine Möglichkeit, herauszufinden, welcher Prozess mein Dienstprogramm gestartet hat?

Danke für die Antworten.

    
Rick 06.12.2009, 23:36
quelle

5 Antworten

9

Sie können die Funktion CreateToolhelp32Snapshot verwenden, um den laufenden Prozess aufzulisten Liste und dann die Funktion Process32First , um die th32ParentProcessID , welches der Bezeichner des Prozesses ist, der diesen Prozess erstellt hat (sein übergeordneter Prozess).

Siehe dieses Beispiel.

%Vor%     
RRUZ 07.12.2009, 04:12
quelle
2

Ich würde einen zusätzlichen Parameter hinzufügen, den Sie nur kennen (es kann eine GUID sein), wenn diese GUID nicht Teil der an Ihr Dienstprogramm übergebenen Parameter ist. Beenden Sie die Anwendung sofort.

    
G-Man 07.12.2009 00:22
quelle
2

Die schnelle Antwort auf Ihre Frage lautet: "Nun, nein, Sie können nicht verhindern, dass eine Anwendung ausgeführt wird". Wenn es eine ausführbare Datei ist, kann sie ausgeführt werden. Keine Möglichkeit, das zu stoppen.

Und wenn Sie die Anwendung nicht kontrollieren können (wie Ihre Kommentare zu zeigen scheinen), wird Gs exzellenter Vorschlag nicht funktionieren, oder? Sie haben keine Möglichkeit zu kontrollieren, was die App macht, und Sie können nicht kontrollieren, ob die App auf Ihre spezielle Befehlszeile reagiert.

Das ist also eine interessante Situation.

Der einzige Weg, den ich sehe, ist, den Zugriff auf die EXE komplett zu verhindern oder zumindest zu erschweren.

Sie könnten dies tun:

  1. Betten Sie die EXE als Ressource in Ihre Host-EXE ein
  2. Wenn es an der Zeit ist, die EXE auszuführen, extrahieren Sie sie mit TResourceStream
  3. Schreiben Sie es aus dem TResourceStream mit TFileStream
  4. aus
  5. Führe es aus
  6. Löschen Sie es, wenn Sie fertig sind.

Nicht schön, aber es ist die einzige Möglichkeit, die EXE davon abzuhalten, nur zu Ihren Bedingungen und Ihren Bedingungen geführt zu werden.

    
Nick Hodges 07.12.2009 00:42
quelle
1

Wenn diese Anwendung nur innerhalb des Hosts ausgeführt wird, fügen Sie einfach die Formulare für die Anwendung in die Hauptanwendung ein und aktivieren Sie sie wie ein anderes Formular?

    
Tim Ebenezer 06.12.2009 23:42
quelle
1

Wir verwenden eine ziemlich einfache Technik, die nur ein paar Zeilen Code benötigt. Die Eltern-App und die Dienstprogramm-App verwenden einige gängige GUIID-Zeichenfolgen (im Code) und rufen RegisterWindowMessage auf, um eine Art "Hallo" -Handshake-Protokoll zu erstellen. Wenn die Dienstprogramm-App zum ersten Mal gestartet wird, wird diese Nachricht veröffentlicht. Wenn die übergeordnete App ausgeführt wird und das Dienstprogramm gestartet wurde, wird die Antwortnachricht veröffentlicht, die vom Dienstprogramm angezeigt wird und alles in Ordnung ist. Wenn nicht, wird das Zeitlimit überschritten und das Programm beendet.

    
Brian D. Coryell 09.12.2009 15:42
quelle

Tags und Links