使用系统的Perl调用突然开始失败

laik7k3q  于 2022-11-15  发布在  Perl
关注(0)|答案(3)|浏览(251)

本周我的一个标准perl [Strawberry perl 5,version 32,subversion 1(v5.32.1),为MSWin 32-x64-multi-thread构建]脚本开始失败。
调查显示,所有的系统类型调用,backtick,qx,pipe open,都失败了。我试着构建一个perl的调试版本,即使这样也失败了,因为构建过程使用了miniperl,它也有同样的问题。
...\miniperl.exe-I..\lib..\make_ext.pl“创建一个新的文件夹,并将其添加到文件夹中。
无法生成“cmd.exe”:在..\make_ext.pl第580行没有这样的文件或目录。
无法生成“cmd.exe”:在..\make_ext.pl第582行没有这样的文件或目录。
不成功的make(dist/if):代码=65280,位于..\make_ext.pl第584行。
我试着定义PERL 5SHELL(cmd的完整路径,pwsh代替cmd),关闭恶意软件保护,所有我能想到的恢复。
所以,实际的问题是:有没有人对我如何追踪这件事有建议?它是在周四工作的,从那以后就没有系统更新[OS版本10. 0. 22000]。

gijlo24d

gijlo24d1#

几周前我遇到了同样的问题。我使用ActiveState perl,所以我尝试安装Strawberry perl,但是在w/ Strawberry上也遇到了同样的问题。我还看到创建了零长度文件。这在多台机器上都发生了。一台是Winver 1909,另一台是21 H2。解决方法是使用要运行的程序的完整路径。
您也可以在程序前面插入cmd.exe的完整路径。请尝试以下操作:

$temp = `$ENV{COMSPEC} /c date /T`;
print "\$temp = $temp";

我一直认为这是由于W10安全更新引起的,但我真的不知道原因。我将编写一个名为Backticks()的sub,我可以这样使用它:

print Backticks('date /T');

subx 1 m1n1x将返回$ENV{COMSPEC} /c @_。这是一个黑客,但在这一点上,我不知道还能做什么。

u1ehiz5o

u1ehiz5o2#

使用Malwarebytes测试版(4.5.10.200)为我修复了这个问题。

noj0wjuj

noj0wjuj3#

我遇到了同样的问题开始约10天前。我以为它与路径,但它似乎是好的。问题是在2台机器:Win10和Win11。我几天前刚买的Win11 PC,安装了草莓版并进行了测试。当我调用system(..)时出现同样的错误。我找到的短期解决方案是将cmd.exe从c:\windows\system32复制到脚本运行的目录。不是一个好的解决方案,但它让我度过了一天。我怀疑这是过去几周在windows中进行的一些安全更新。
2022年6月15日更新:我可以确认Malwarebytes测试版(4.5.10.200)修复了这个问题。但是,在安装Malwarebytes之前,我在我的Win11 PC上遇到了这个问题。也许是Windows安全的问题?

相关问题