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

jim*_*tut 6 perl cmd file-association windows-10

我在我的新Windows 10 PC上安装了ActiveState Perl.我已经在我自己的几台PC上安装了相同版本的Perl,它安装在我公司的其他用户PC上.同样的安装,由我创建.

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

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

我第一次运行Perl脚本(从Windows命令提示符,我相信,只使用script.pl语法),Windows弹出一个窗口,询问我想用什么程序来打开这个文件.Perl是默认值,我单击OK.

我从来没有在Windows 7或8中看过那个窗口,所以我认为它是Windows 10特有的东西,并且这是某种方式阻止我只是打字script.pl.因为,在启动时script.pl,我需要文件关联来选择正确的程序,但是当我输入时perl.exe script.pl,perl.exe正在直接启动.但是,Windows 10"选择你的默认程序"的事情在通过弄乱文件关联从命令提示符运行时会受到阻碍.

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

这似乎是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
Run Code Online (Sandbox Code Playgroud)

结果应该是输出:

The filename is C:\WINDOWS\system32\foo.foo
Run Code Online (Sandbox Code Playgroud)

但Windows 10什么都不做.它似乎只允许内置应用程序以这种方式关联,而不是下载/安装的EXE的BAT脚本.

jim*_*tut 4

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

MSDN 帖子在这里:https://social.msdn.microsoft.com/Forums/en-US/f19d740d-21c8-4dc2-a9ab-d5c0527e932b/nasty-file-association-regression-bug-in-windows-10-console