Announcement

Collapse
No announcement yet.

Process auch nach Neustart eindeutig identifizieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Process auch nach Neustart eindeutig identifizieren

    Hi,
    ich starte aus einer Apllikation heraus ein weiteres Programm. Ich muss sobald die Applikation den Fokus erhält (geht nicht anders) überprüfen, ob das gestartete Programm noch aktiv ist.

    Eigentlich kein Problem: zum Starten des Programmes benutze ich CreateProcess und merke mir die ProcessId. Erhält die Applikation den Fokus, überprüfe ich mit OpenProcess gefolgt von GetExitCodeProcess, ob das Programm noch aktiv ist.

    Das funktioniert auch alles. Jetzt will ich aber auch beim Neustart von Windows bzw. meiner Applikation überprüfen, ob ein vorher gestartetes Programm noch aktiv ist, oder ob es in der Zwischenzeit beendet wurde. Leider kommt es vor, dass die, für das am Anfang von meiner Applikation gestartete Programm, vergebene ProcessId an einen anderen Task vergeben wurde. Somit "merkt" meine Apllikation nicht, das das Programm bereits beendet wurde.

    Frage: wie kann ich zusätzlich das von meiner Applikation gestartete Programm identifizieren? Ich habe ProcessVersion versucht, aber die scheint immer gleich zu sein.

    Hat jemand eine Idee? Kennt z.B. jemand ein Möglichkeit, den Programmnamen oder den Pfad zum Executable anhand der ProcessId zu ermitteln?

    Ciao
    Compiguru

    Für alle, die Code brauchen:

    bool ProcessInMem(long ProcessId, long DbProcessVersion)
    {
    unsigned long ExitCode;
    HANDLE hProcess = NULL;

    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessId);

    if(hProcess != NULL)
    {
    GetExitCodeProcess(hProcess, &ExitCode);

    CloseHandle(hProcess);

    if(ExitCode == STILL_ACTIVE)
    {
    DWORD ProcessVersion = GetProcessVersion(ProcessId);

    if(DbProcessVersion == ProcessVersion)
    return true;
    }
    }
    return false;
    }

  • #2
    Wie deine Anwendung einen Windows-Neustart überlebt ist mir zwar ein Rätsel, aber versuch es mit OpenMutex

    Das Beispiel
    http://www.marquardtnet.info/cecke/q...quicky_19.html
    sollte analog für VC funktionieren
    Christian

    Comment

    Working...
    X