gpt4 book ai didi

windows - 将 Perl 脚本生成为具有特定名称的进程

转载 作者:可可西里 更新时间:2023-11-01 10:38:54 25 4
gpt4 key购买 nike

我需要一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com