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

时间:2016-08-11 04:04:31

标签: perl cmd windows-10 file-association

我在新的Windows 10 PC上安装了ActiveState Perl。我已经在我自己的几台PC上安装了相同版本的Perl,并且安装在100多个其他用户上。 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%确定为什么它可以在资源管理器中运行,但是我很确定我需要清除那个默认程序。我删除了.plHKEY_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

结果应该是输出:

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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