Halihallo Rol
Win32::Process::Create($Win32::Process::Create::ProcessObj,
'c:\perl\bin\perl.exe',
'perl '.join(' ', @ARGV),
0,
DETACHED_PROCESS,
".") or
die print_error();
Ich muß gestehen, dass ich das überhaupt noch nicht verstehe. Auch aus dem, was ich bei CPAN über Win32::Process gelesen habe werde ich nicht schlau.
Was verstehst du denn nicht? - Win32::Prozess stellt eine Schnittstelle zur WinAPI her. Du kannst neue Prozesse erstellen über Win32::Process::Create. Eine Prozesseigenschaft ist DETACHED_PROCESS, d. h. dass dieser völlig unabhängig und in der Taskleiste nicht sichtbar ist. Das erste Argument ist ein Objektcontainer, der die Infos speichert, gefolgt vom zu startenden Programm, dann die Argumente, ...
Ich habe hier @ARGV genommen (also, das was du in der DOS-Box nach dem Dateinamen stehen hast, die Programmparameter). D. h. du kannst das script, was oben steht, wie folgt verwenden (bei mir läuft es übrigens ganz prima):
perl start_detaches_process.pl script_to_run.pl
mit dem Code kannst du jedes Perl-Script als Detached Process laufen lassen. @ARGV enthält dann den Dateinamen des zu startenden Perl-Scriptes, welches dann im neuen Prozess dem Perl-interpreter wieder übergeben wird, der es dann interpretiert und laufen lässt.
Ist's jetzt etwas klarer geworden?
Kannst du mit vielleicht erklären, wie das funktioniert und wie man es "einbaut" ? Das einfache einkopieren in den Anfang des Script funktioniert auf jeden Fall nicht (und ist mangels bergreifen der Funktion auch nicht unbedingt mein Ziel).
Also, du musst statt @ARGV wohl eine Variable hinsetzen, sodass du es in deinem Progi dynamisch festlegen kannst, welches Script auch gestartet werden soll. Dann musst du c:\perl\bin\perl.exe auf deinen Perl-Interpreter zeigen lassen. Funktioniert's dann?
Viele Grüsse
Philipp