It's not possible to do it without launching the command prompt. You can
hide the command prompt immediately after the GUI is launched, but it still needs to be there for a second.
There are a couple of ways of doing this. First off, with Win32::Gui you can use something like:
my ($dos) = Win32::GUI::GetPerlWindow();
Win32::GUI::Hide($dos);
That you can use within the application and it will hide the DOS window/command prompt almost immediately.
And I've used the following to perform the same function in TK, though this is a "wrapper" program to launch a program and it exits. So, this program runs in a command prompt, which exits, and launches a new perl interpreter that does not open a command prompt.
#!/usr/bin/perl -w
# loader - starts Perl scripts without the annoying DOS window
use strict;
use Win32;
use Win32::Process;
# Create the process object.
Win32::Process::Create($Win32::Process::Create::ProcessObj,
'C:/perl5/bin/perl.exe', # Whereabouts of Perl
'perl realprogram', #
0, # Don't inherit.
DETACHED_PROCESS, #
".") or # current dir.
die print_error();
sub print_error() {
return Win32::FormatMessage( Win32::GetLastError() );
}
The second example is word for word from the O'Reilly cookbook, section 15.17
And lastly, if you are using ActiveState perl, you can probably use wPerl.exe to launch the app (instead of just perl.exe) and that should do the trick.