Windows 10 运行 上的 Perl 脚本来自资源管理器但不是命令提示符

Perl Scripts on Windows 10 run from Explorer but not Command Prompt

我已经在我的新 Windows 10 PC 上安装了 ActiveState Perl。我已经在我自己的几台 PC 上安装了完全相同的 Perl 版本,并且在我公司的 100 台其他用户的 PC 上也安装了它。完全相同的安装,由我创建。

这是第一次在 Windows 上尝试此操作 10. 在资源管理器中双击 Perl 脚本 (*.pl) 的基本操作会导致控制台 window 打开并且 Perl 运行 脚本。

此外,在 Windows 命令提示符中,我可以键入 perl.exe script.pl,并且脚本 运行 没问题。但是,当我只键入 script.pl 时,没有任何反应。任务管理器中没有输出、没有错误、没有 perl.exe 个进程可见。

我第一次 运行 一个 Perl 脚本(来自 Windows 命令提示符,我相信,只使用 script.pl 语法),Windows 弹出一个 window 问我想用什么程序打开这个文件。 Perl 是默认设置,我单击确定。

我从未在 Windows 7 或 8 中看到 window,所以我认为它是 Windows 10 特有的东西,并且它以某种方式阻止了我只是输入 script.pl。因为,当启动 script.pl 时,我要求文件关联选择正确的程序,但是当我键入 perl.exe script.pl 时,perl.exe 被直接启动。但是,Windows 10 "pick your default program" 当从命令提示符 运行ning 弄乱文件关联时,事情就成了障碍。

尽管不能 100% 确定为什么它可以在资源管理器中运行,但我很确定我需要清除默认程序。我删除了 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts.pl 文件的注册表项,但这没有帮助。

这似乎是 Windows 10 的一个更普遍的问题,或者可能只是我安装它,或者我不知道的组策略。

以下命令(运行 在管理员命令提示符下)在 Windows 8.1 中工作正常,但在 Windows 10 中工作正常:

assoc .foo=Foobar
ftype Foobar=C:\WINDOWS\system32\foo.bat %1
echo @echo off > foo.bat
echo echo The filename is %1 >> foo.bat
echo hi > foo.foo
foo.foo

结果应该是输出:

The filename is C:\WINDOWS\system32\foo.foo

但是Windows10什么都不做。它似乎只允许内置应用程序以这种方式关联,而不是 downloaded/installed EXEs 的 BAT 脚本。

确保您的 PATHEXT 环境变量中包含 .pl。

事实证明,Microsoft 在 Windows 10 中颠倒了注册表设置的极性,这也影响了其他 Perl 程序员。解决方法是将HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\InheritConsoleHandles设置为“0”。

MSDN post 此处:https://social.msdn.microsoft.com/Forums/en-US/f19d740d-21c8-4dc2-a9ab-d5c0527e932b/nasty-file-association-regression-bug-in-windows-10-console