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

标签 windows perl exec

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

相关文章:

windows - 名称为 'svn_delta' 的临时文件已在/usr/lib/perl5/vendor_perl/5.14/Git.pm 第 1024 行使用

Windows批处理脚本查找空闲文件名

perl - 是否可以将 Perl 的 Marpa 解析器用于公共(public)网络服务器?

php - 在 PHP 中执行外部 BLAST 程序

python - 为什么 exec() 命令运行时没有错误,但没有产生预期的输出?

go - 如何在不将结果输出到终端的情况下重定向 Go 中的命令?

windows - Win32 : How to crash?

java - 更改 MySQL 时区 Windows

arrays - Perl 数组排序(第二部分)

python - 正则表达式中重复限定符被忽略