PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Prozessfrage ...


Jesus
2004-10-19, 20:53:56
Hallo,

die Lösung ist zwar wahrscheinlich ganz einfach, oder unmöglich....

Aber wie bringe ich einen Prozess ( unter Windows ), den ich z.b. mit CreateProcess() erzeugt habe dazu, unabhängig vom erzeugenden Prozess zu sein?

Bisher ist es so dass wenn die erzeugende Anwendung geschlossen wird auch der Kindprozess mitgeschlossen wird. Kann ich das verhindern ?

Exxtreme
2004-10-19, 21:00:31
Wenn's nicht unbedingt CreateProcess sein muss dann würde ich's mit WinExec versuchen. =)

Jesus
2004-10-19, 21:26:40
naja ich brauch schon etwas Kontrolle über den Prozess :redface:

Crushinator
2004-10-20, 11:04:02
Dann nimm einfach WinExec und übe die Kontrolle über OpenProcess (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/openprocess.asp) aus. ;)

Gast
2004-10-21, 08:38:54
Dann nimm einfach WinExec und übe die Kontrolle über OpenProcess (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/openprocess.asp) aus. ;)


hm aber wie bekomm ich die Process ID dann, oder das Hendl ? ;) WinExec gibt mir ja nichts zurück ?

Jesus
2004-10-21, 08:53:20
habs gerade probiert, aber leider killt mir WinExec auch meinen Process sobald der Aufrufende geschlossen wird :(

Crushinator
2004-10-21, 11:05:33
:o Moooooment, das muß ich gleich ausprobiern....

Coda
2004-10-21, 11:06:35
WinExec ist auf keinem Fall die Lösung, die Funktion gibt's nur noch wegen Steinzeit-Windows Kompatibilitätgründen.

Benützt du nen Console App? Dann probier mal bei dwCreationFlags DETACHED_PROCESS

Falls nicht, hast du das Handle auch geschlossen?

Jesus
2004-10-21, 14:34:37
WinExec ist auf keinem Fall die Lösung, die Funktion gibt's nur noch wegen Steinzeit-Windows Kompatibilitätgründen.

Benützt du nen Console App? Dann probier mal bei dwCreationFlags DETACHED_PROCESS

Falls nicht, hast du das Handle auch geschlossen?

hab schon alle Flags durchprobiert die´s gibt , leider ohne Erfolg.

Ich starte mit Createprocess eine Consolen app von einer DLL aus :ucrazy3: und sobald die DLL verschwindet ist die consolen APP auch weg.

Handles schliesse ich eigentlich schon so:

if(!CreateProcess(NULL,buffer,NULL,NULL,FALSE,CREATE_NEW_CONSOLE ,NULL,NULL,&si,&pi))
{
printf("\nCould not start watcher.exe! Code: %d\n",GetLastError());
return 2;
}


// close the unused handles again
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

:| :|

Coda
2004-10-21, 15:23:47
Würgs, auch wenn das keine Lösung ist, aber würdest du bitte aufhören eklige Macros zu benützen.
In C++ gibt es 0 für NULL und false für FALSE ...

Jesus
2004-10-21, 15:36:51
Würgs, auch wenn das keine Lösung ist, aber würdest du bitte aufhören eklige Macros zu benützen.
In C++ gibt es 0 für NULL und false für FALSE ...

ehehe, ist mir gar nicht aufgefallen, hab sie auch nirgends deklariert, gibts anscheinend schon in irgendnem header ... ;)

btw is nur c ;)

Crushinator
2004-10-21, 15:41:32
Sorry für die Verspätung, aber ich hatte zutun....

Merkwürdig, merkwürdig. Ich habe mir eben einfacheitshalber eine reine Win32-App vom VC6-Wizzard erzeugen lassen und habe nur schnell paar Menüpunkte mit veschiedenen Startarten von "notepad.exe" eingebaut. Der gestartete Prozeß bleibt bei allen Varianten bestehen. Das Verhalten ist bei anderen gestarteten Anwendungen (also, nicht nur Notepad) gleich. :|

Source und Binary gibt's hier (http://home.arcor.de/crushinator/files/MyProcess.rar).

Xmas
2004-10-22, 01:03:10
Würgs, auch wenn das keine Lösung ist, aber würdest du bitte aufhören eklige Macros zu benützen.
In C++ gibt es 0 für NULL
In C kannst du genauso 0 statt NULL schreiben, auch wenn da NULL als ((void*) 0) statt als 0 definiert ist. Nur halte ich es trotzdem für besseren Stil, bei Pointern NULL zu verwenden. Auch in anderen Sprachen verwendet man Symbole wie Null, None oder Nothing, niemals 0, um eine ungültige Referenz zu kennzeichnen.