如何让我的Perl脚本像Windows上的普通程序一样?

Mic*_*man 37 windows perl

我希望我的Perl脚本的行为与任何其他可执行文件(*.exe文件)一样.

  • 当我双击时,myscript.pl我希望它执行而不是在文本编辑器中打开.
  • 我想跑myscript.pl而不是perl myscript.pl.
  • 我真的想跑myscript而不是myscript.pl.
  • 我想跑program | myscript而不是program | perl myscript.pl.
  • 我希望能够通过拖放操作来运行我的脚本.

您必须在Windows上进行许多更改才能使所有这些工作正常进行.用户通常偶然发现的东西,工作,一次一个; 让他们感到困惑,他们是否犯了错误,Perl中存在错误,Windows中存在错误,或者他们想要的行为是不可能的.这个问题旨在提供一个单一的参考点,使一切工作在前面; 理想情况下,在这些问题发生之前.

相关问题:

Mic*_*man 58

注意:以下操作需要管理权限.对于使用命令提示符的步骤,必须通过Windows Vista/Windows 7上的"以管理员身份运行"启动.

使用perl关联*.pl文件

在shell提示符下运行以下命令:

assoc .pl=PerlScript
ftype PerlScript=C:\bin\perl.exe "%1" %*
Run Code Online (Sandbox Code Playgroud)

替换C:\Perl\bin\perl.exe为Perl安装的路径.这使您可以运行myscript.pl而不是perl myscript.pl.

默认安装位置是:

  • 的activeperl: C:\Perl
  • 草莓Perl: C:\Strawberry

添加.PL到PATHEXT环境变量.

这使Windows在搜索PATH时认为*.pl文件是可执行的.它使您可以运行myscript而不是myscript.pl.

您可以为当前cmd会话设置它

set PATHEXT=%PATHEXT%;.PL
Run Code Online (Sandbox Code Playgroud)

永久设置(在Windows Vista或Windows 7下)

setx PATHEXT %PATHEXT%;.PL
Run Code Online (Sandbox Code Playgroud)

在Windows XP下,您必须使用GUI:

  1. 右键单击"我的电脑",然后单击"属性".
  2. 单击"高级"选项卡.
  3. 单击环境变量.
  4. 选择PATHEXT,然后单击编辑.
  5. 附加;.PL到当前值.

使I/O重定向工作

I/O重定向(例如program | myscript)不适用于通过文件关联启动的程序.有一个注册表补丁来纠正问题.

  1. 启动注册表编辑器
  2. 找到并单击注册表中的以下项: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. 在"编辑"菜单上,单击"添加值",然后添加以下注册表值:
    • 价值名称: InheritConsoleHandles
    • 数据类型: REG_DWORD
    • 基数: Decimal
    • 价值数据: 1
  4. 退出注册表编辑器.

警告:原则上,这只应在Windows XP上使用.根据我的经验,它在Windows 7中也是必要的.在Windows 10中,这是主动有害的 - 程序执行但在stdout/stderr上什么都不产生.注册表项需要设置为0而不是1.

也可以看看:

如果修补注册表不是运行选项,program | perl -S myscript.pl 那么PATH中的脚本就不那么烦人了.

添加放置处理程序

为Perl添加drop处理程序允许您通过拖放操作运行Perl脚本; 例如,将文件拖放到Windows资源管理器中的文件图标上并将其放在那里.运行以下脚本以将必要的条目添加到注册表:

use Win32::TieRegistry;
$Registry->Delimiter("/");
$perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"};
$perlKey-> {"shellex/"} = {
    "DropHandler/" =>  {
        "/" => "{86C86720-42A0-1069-A2E8-08002B30309D}"
}};
Run Code Online (Sandbox Code Playgroud)

  • 那么,"毕竟有不止一种方法":) (6认同)
  • @ivancho:主要原因是这是从各个地方收集的数据集合.次要原因是当完成锤子就足够时,厌恶使用大锤(注册表编辑).也就是说,我会发现一个全面的"运行这个*.reg文件"的答案很有用,如果不是非常有启发性的话. (3认同)
  • 不知何故,在 Windows10 上我没有获得脚本的参数。我通过执行以下附加步骤使其工作(风险自负!):删除注册表项:`HKCR/.pl`、`HKCR/pl_auto_file`、`HKCR/PerlScript`、`HKCU/SOFTWARE/Microsoft/Windows/当前版本/资源管理器/FileExts/.pl`。然后打开任务管理器并杀死所有explorer.exe任务(您的任务栏消失 - 不用担心),然后在任务管理器中执行“文件/运行新任务”并输入explorer.exe,然后重复回答中的命令行命令,然后杀死/重新启动explorer.exe。 (2认同)

Dal*_*aen 7

一旦准备好由用户运行,就可以使用pl2bat将perl脚本转换为批处理文件.

这个技巧通过perl -x开关来实现,根据它perldoc perlrun,使Perl搜索第一行看起来像#!.*perl.


归档时间:

查看次数:

29267 次

最近记录:

6 年,10 月 前