• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Nach Programmausführung schließt sich Perl\Tk

byron1778

Hacker
Hallo Forum,

ich habe mit meinem Script folgendes Problem.

Sobald ein Button im Hauptfenster gedrückt wird, das Programm ausgeführt wird und man dieses Programm dann schließt, schließt sich auch das Hauptfenster von Perl\Tk.

Wie kann ich es nun verhindern, dass sich das Perl\Tk Programm schließt?

Am liebsten wäre es mir, wenn es immer offen bleiben würde!

Habe es schon mit einer Endlosschleife um das ganze Programm herum versucht, hat aber leider nichts geholfen!

Hier der Code:

Code:
#!/usr/bin/perl -w

use Tk;

my $mw = MainWindow -> new;
$mw->title('Programme ausführen');

$mw->Button(-text => "Word", -command => sub { exec("C:\\Programme\\\"Microsoft Office\"\\OFFICE11\\WINWORD.exe") })->place(-relx => 0.2, -rely => 0.2);
$mw->Button(-text => "Outlook", -command => sub { exec("C:\\Programme\\\"Microsoft Office\"\\OFFICE11\\outlook.exe") })->place(-relx => 0.2, -rely => 0.4);
$mw->Button(-text => "Chessbase", -command => sub { exec("C:\\Programme\\ChessBase\\ChessProgram8\\ChessProgram8.exe") })->place(-relx => 0.2, -rely => 0.6);
$mw->Button(-text => "Scanner", -command => sub { exec("C:\\Programme\\epson\\\"Creativity Suite\"\\\"Scan Assistant\"\\EScanAssist.exe") })->place(-relx => 0.4, -rely => 0.2);
$mw->Button(-text => "Chessbase Internet", -command => sub { exec("C:\\\"Dokumente und Einstellungen\"\\Peter\\Favoriten\\\"Austrian Chess Federation - Official Website.url\"") })->place(-relx => 0.4, -rely => 0.4);
$mw->Button(-text => "BlitzIn", -command => sub { exec("C:\\\"Dokumente und Einstellungen\"\\Peter\\Favoriten\\\"Austrian Chess Federation - Official Website.url\"") })->place(-relx => 0.4, -rely => 0.6);
$mw->Button(-text => "Abbruch", -command => sub { exit })->place(-relx => 0.3, -rely => 0.8);

MainLoop;

Vielen Dank für Eure Hilfe!

Mfg
Byron
 
Ich habe mit Tk unter Perl so gut wie gar nicht beschäftigt, aber bei Perl ist es so das "exec" dafür sorgt das ein Subprozeß erzeugt wird und der Elternprozeß dann quasi gekillt wird.
Da Du weiter den Elternprozeß erhalten willst, wirst Du wohl um "system" nicht herum kommen. Oder Du beschäftigst dich auf noch tieferer Ebene mit dem forking.
 

abgdf

Guru
Hallo,

Du startest Windows-Prozesse, es handelt sich also um eine WINDOWS-Frage.

Dies ist aber der LINUX-Club !!!

Wieauchimmer, schau Dir mal die Module "Win32::Spawn" und "Win32::process" an.
Oder Du könntest mit "Win32::OLE" über DCOM Instanzen der Programme starten.

Viele Grüße
 
system() ist nicht sonderlich empfehlenswert. Da kann man auch den IFS umsetzen oder solche Spaesse. Besser ist ein fork() + exec() + wait() usw. Die ueblichen system calls, die man aus C kennt, stehen unter Perl selbstverstaendlich auch zur Verfuegung.
 
Oben