我需要一个 Perl 脚本来生成一个任意名称的自身,即这样操作系统的其余部分就会将其视为例如“aaa.exe”。我的印象是这在 Perl 中是可能的,但现在我不确定。
我在 Windows 7 amd64 上使用 Strawberry Perl 5.14,32 位版本。
这是我尝试过但不起作用的方法:
#!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 = <>;
}
我根据 exec perldoc page 中的例子编写了这个(那里有系统页面链接):exec {'/bin/csh'} '-sh';
,其中,IIUC,目标是让/bin/csh 认为它是“-sh”,虽然我不确定这是否也应该使 csh 从外面看起来像“-sh”。另外,它是 UNIX 示例,而我在 Windows 上。
我想要一个脚本,它作为 spawnself.pl aaa.exe
运行(从命令行)会产生自己,打印 running as aaa.exe,PID 是1234
,查看任务管理器会将该程序显示为“aaa.exe”。然而,我的片段以及世界其他地方仍然将自己视为“perl.exe”:
- 在任务管理器中,进程 1234 仍被命名为“perl.exe”,因此它打印
以C:\path\to\my\perl.exe运行,PID为1234
我做错了什么?有人可以解释一下吗?
最佳答案
我发现了一个非常丑陋但有效的 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 = <>;
}
我实际上制作了一个 perl.exe 的副本并运行那个,所以最后我只是正在运行“aaa.exe”,所以没有必要撒谎。
关于windows - 将 Perl 脚本生成为具有特定名称的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993740/