在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自己的控制台中没有任何干扰痕迹。
可悲的供应商希望我们解决他们自己的软件问题,而我的老板们不会付钱给我。