在Windows上调用“perl script.pl”与“调用script.pl”之间的区别

在Windows服务器上(我已经testing过2008 R2和2012 R2),我们注意到在执行从批处理调用的Perl脚本中的不同行为。

考虑一个原始的batch file,如下所示:

:beginlbl call path\script.pl goto :beginlbl 

迟早(在数百次执行后,在其他情况下执行几次脚本后)将会出现一条错误消息: “Windows无法访问指定的设备,path或文件,您可能没有相应的权限来访问该项目“。

如果代码的第二行被修改为如下所示:

 call perl path\script.pl 

(注意脚本之前的可执行文件名。)脚本将永远运行,没有问题。

在上述两种情况下,Windows的执行方式有何不同?

使用文件关联通过shell进程来评估文件types(扩展名)并启动相应的进程。 你可能压倒这个。 这与调用.txt时获得注册编辑器的方式类似。 另请参阅ShellExecute。

直接调用可执行文件删除中间人,并将永远是首选。

Uslackr对原始问题的评论也是正确的,他指出系统path上的perl可执行文件被调用。 您最好直接指定您希望以完整path运行的可执行文件,以避免意外调用另一个可执行文件。 这对可靠性和安全性都很好。 可移植性被牺牲了,但是你可以select你的优先级。

我马太的回答是正确的,因为我分享他的意见,应该如何执行。 实际上,我们inheritance了我们支持的系统,最好的解决scheme并不是我们所拥有的。 改变/改善是另一回事。

今天我们知道我们的问题是由不好的Crowdstrike传感器引起的。 基本上这个间谍软件正在Windows上造成严重破坏。 令人遗憾的是a)Windows事件日志中没有踪迹b)Crowdstrike自己的控制台中没有任何干扰痕迹。

可悲的供应商希望我们解决他们自己的软件问题,而我的老板们不会付钱给我。