2012-04-03 6 views
2

Ich brauche ein Perl-Skript, um sich mit einem beliebigen Namen, d. H., So dass der Rest von OS wird es als z. "aaa.exe". Ich hatte Eindruck, dass dies möglich ist, in Perl zu tun, aber jetzt bin ich nicht sicher.Spawn Perl-Skript als ein Prozess mit bestimmten Namen

Ich bin mit Strawberry Perl 5.14, 32-Bit-Build, auf Windows 7 amd64.

Hier ist, was ich versucht, und nicht funktioniert:

#!perl -w 
# spawnself.pl 

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

ich dies aus exec perldoc page (es Systemseite Links) basierend auf dem Beispiel zusammen: exec {'/bin/csh'} '-sh';, wo IIUC, ist das Ziel/bin zu machen/csh denke, es ist „-sh“ ist, obwohl ich nicht sicher bin, ob das auch soll csh aussehen wie „-sh“ von außen machen. Außerdem ist es UNIX Beispiel, während ich auf Windows bin.

Ich hätte gerne ein Skript, das ausgeführt wird (von der Befehlszeile) als spawnself.pl aaa.exe würde selbst spawnen, Drucken running as aaa.exe, PID is 1234, und die Suche in Task-Manager würde dieses Programm als "aaa.exe" zeigen. Allerdings sieht immer noch mein Schnipsel sowie der Rest der Welt sich selbst als „perl.exe“:

  • im Task-Manager, Prozess 1234 wird nach wie vor „perl.exe“ genannt, so ist es
    running as C:\path\to\my\perl.exe, PID is 1234
  • druckt

Was mache ich falsch? Kann jemand bitte etwas Licht darauf werfen?

+0

Nach einigen Recherchen habe ich das Problem mit 'laufen als spawnper.pl' gefunden - ich '0' $ haben falsch verstanden, ich bearbeite ich die Q dieses heraus zu filtern –

Antwort

1

fand ich eine ziemlich hässlich, obwohl arbeiten, 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 $$\n"; 
    print "press Enter to quit...\n"; 
    my $trash = <>; 
} 

ich eigentlich eine Kopie perl.exe machen und dass man laufen, so schließlich einfach ich „aaa.exe“ leite deshalb braucht man nicht über irgendetwas zu lügen.

Verwandte Themen