windows - 如何使我的 Perl 脚本像 Windows 上的普通程序一样运行?

标签 windows perl

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

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

您必须在 Windows 上进行许多更改才能实现所有 这些东西起作用了。用户通常会偶然发现一些的东西 一个时间;让他们感到困惑,他们是否犯了错误,其中有一个错误 Perl,Windows 中有一个错误,或者他们想要的行为是不可能的。 这个问题旨在提供一个单一的引用点,以便 一切都在前面工作;理想情况下甚至在这些问题发生之前。

相关问题:

最佳答案

注意:以下操作需要管理权限。为了 使用命令提示符的步骤必须通过“运行方式”启动 Windows Vista/Windows 7 上的管理员”。

关联 *.pl 文件与 perl

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

assoc .pl=PerlScript
ftype PerlScript=C:\bin\perl.exe "%1" %*

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

默认安装位置是:

  • ActivePerl:C:\Perl
  • 草莓 Perl:C:\Strawberry

.PL 添加到您的 PATHEXT 环境变量中。

这使得 Windows 在搜索您的文件时认为 *.pl 文件是可执行的 小路。它使您能够运行 myscript 而不是 myscript.pl

你可以为当前的cmd session 设置它

set PATHEXT=%PATHEXT%;.PL

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

setx PATHEXT %PATHEXT%;.PL

在 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
    • 基数:十进制
    • 数值数据:1
  4. 退出注册表编辑器。

警告:原则上,只有在 Windows XP 上才需要这样做。根据我的经验,它在 Windows 7 中也是必要的。在 Windows 10 中,这非常有害——程序执行但在 stdout/stderr 上不产生任何内容。注册表项需要设置为 0 而不是 1。

另见:

如果修补注册表不是运行程序的选项 | perl -S myscript.pl 对于 PATH 中的脚本来说,这是一种不那么烦人的解决方法。

添加放置处理程序

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

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

关于windows - 如何使我的 Perl 脚本像 Windows 上的普通程序一样运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4727480/

相关文章:

windows - Windows 上的 openocd 无效命令 "jtag",使用 olimex arm-usb-ocd-h jtag 加密狗,使用 phytec lpc3250 目标

r - 无法在 rstudio 中启动 pandoc

PERL xampp PPM 错误

perl - AnyEvent->计时器不能与 AnyEvent::Handle 一起使用?

perl - Perl 分发了哪些模块?

perl - BASH:将平面文件中的数据导入模板

windows - 通过 powershell v3.0 启用 ssl 连接 filezilla

sql - 如何将图像字段导出到文件?

perl - Perl 中的 Win32::AdminMisc 编译错误

windows - Windows 8.1 64 位的 NASM 问题