【问题标题】:Perl Scripts on Windows 10 run from Explorer but not Command PromptWindows 10 上的 Perl 脚本从资源管理器运行,但不是命令提示符
【发布时间】:2023-03-22 15:19:01
【问题描述】:

我已经在我的新 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 是默认设置,我点击了确定。

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

虽然不能 100% 确定它为什么可以在 Explorer 中运行,但我很确定我需要清除该默认程序。我删除了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

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

【问题讨论】:

  • 如果我们使用start script.pl会发生什么
  • 使用start script.pl 工作正常。
  • 我卸载了 Perl 5.20.2,并安装了最新的 (5.24.0),但没有任何变化。我还更改了注册表中的命令以打开 notepad.exe 而不是 perl.exe,并且可以在 DOS (script.pl) 中正常工作。调用 perl.exe 的关联似乎有些混乱,尽管仅来自 DOS,而不是资源管理器。它有可能以某种方式调用 wperl.exe 吗?但是在注册表中找不到它...
  • 我认为这不是 Perl 特有的。我创建了一个新的扩展名 (.bar) 并将其与一个简单的 BAT 脚本相关联,该脚本回显“hi”然后暂停。在资源管理器中工作正常,但“script.bar”什么也不做。所以我不认为 Perl 会影响这一点,而是我不能创建与“记事本”以外的任何东西以及 C:\Windows 中的其他项目的关联。这是其他 Windows 10 或 GPO 限制吗?

标签: perl cmd windows-10 file-association


【解决方案1】:

事实证明,微软在 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

【讨论】:

  • 您是否知道 Windows 10 / 2009(内部版本 19042)是否发生了某些变化?此解决方案似乎不适用于我使用该 Windows 版本的机器。
【解决方案2】:

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

【讨论】:

  • 是的,确实如此:PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PL
  • PATHEXT 只需要允许您从文件名中删除扩展名并仍然能够执行它。您可以“运行”任何文件,甚至是 JPG,只需在 DOS 中输入文件名即可。
猜你喜欢
  • 1970-01-01
  • 2018-12-21
  • 2011-01-23
  • 2011-03-09
  • 2020-12-19
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多