windows - Kryd Perl script som en proces med særligt navn

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brug for et Perl-script til at gyde sig selv med et vilkårlig navn, dvs. at resten af ​​OS vil se det som f.eks. 'Aaa.exe'. Jeg havde indtryk af, at dette er muligt at gøre i Perl, men nu er jeg ikke sikker.


Jeg bruger Strawberry Perl 5.14, 32-bit build, på Windows 7 amd64.


Her er hvad jeg forsøgte og ikke virker:


#!perl -w
# spawnself.pl

if ($ARGV[0]) {
    my $name = ($ARGV[0]);
    system {"perl"} $name, $0;
} else {
    print "running as $^X, PID is $$
";
    print "press Enter to quit...
";
    my $trash = <>;
}


Jeg komponerede dette på basis af et eksempel fra exec perldoc-siden (systemside links der): exec {'/bin/csh'} '-sh';, hvor, IIUC, målet er at gøre/bin/csh synes det er '-sh', selvom jeg ikke er sikker hvis det også skulle gøre csh til at ligne '-sh' udefra. Desuden er det UNIX-eksempel, mens jeg er på Windows. [7]


Jeg vil gerne have et script, som bliver kørt (fra kommandolinjen) som spawnself.pl aaa.exe ville gyde sig selv, udskrive running as aaa.exe, PID is 1234 og se på Opgavestyring ville vise dette program som 'aaa.exe'. Men mit uddrag og resten af ​​verden ser stadig sig selv som 'perl.exe':



  • i task manager, proces 1234 hedder stadig 'perl.exe', så det udskriver

    running as C:path omyperl.exe, PID is 1234



Hvad gør jeg forkert? Kan nogen formode lidt på dette?

Bedste reference


Jeg fandt en ret grim, selvom jeg arbejdede, hack:


#!perl -w
#spawnself-ugly.pl

use File::Copy;

if ($ARGV[0]) {
    my $name = ($ARGV[0]);
    copy($^X, $name);
    my @args = ($name, $0);
    system @args;
} else {
    print "running as $^X, PID is $$
";
    print "press Enter to quit...
";
    my $trash = <>;
}


Jeg laver faktisk en kopi af perl.exe og kører den ene, så endelig kører jeg 'aaa.exe' , så der er ingen grund til at lyve om noget.