Dann machst Du noch irgendwas anderes falsch. Ich habe es mit dem folgenden Script probiert:
sleep 3;
system "notepad.exe";
Wenn ich das mit
c:\perl\bin\perl.exe c:\test.pl
starte, sehe ich 3 Sekunden lang eine leere DOS-Box und dann geht der Notepad auf (als Beweis, dass das Script wirklich gelaufen ist).
Mit
c:\perl\bin\wperl.exe c:\test.pl
Passiert 10 Sekunden lang nichts (kein Fenster), dann geht Notepad auf.
Eine andere Möglichkeit gibt es nicht. perl.exe ist nun mal eine Konsolenapplikation, da geht immer ein DOS-Fenster auf. wperl.exe hingegen wird als Windows-Programm erstellt und hat keine Konsole. Beide rufen letztlich nur den eigentlichen Perl-Interpreter in der perl.dll auf.
Wenn man fallweise ein Fenster haben möchte (z.B. für Debugausgaben unter bestimmten Bedingungen) kann man auch erstmal mit perl.exe starten und das Fenster dann per Windows-Api verstecken, dann blitzt das DOS-Fenster aber meist auch kurz auf. Das mit der Api geht so:
sub showconsole {
my ($flag) = @_; use Win32::API::Prototype;
ApiLink( 'kernel32.dll', 'HWND GetConsoleWindow()' );
ApiLink( 'user32.dll', 'BOOL ShowWindow( HWND hWnd, int iCommand )' );
my $hWnd = ::GetConsoleWindow();
::ShowWindow( $hWnd, $flag ? 0x04 : 0x00 );
}
Datum: 31.12.2006-21:16
