1

一些背景知识:在我的 Rails 环境中,我使用的是CoffeeScript,它使用ExecJS,它使用Windows 脚本主机来执行 Javascript 文件。

不幸的是,当我的 CoffeeScript 文件被编译时,我遇到了巨大的延迟(> 30 秒)。

使用 Process Explorer 和 Process Monitor 我已经将命令行确定为原因之一。cscript.exe期望其参数带有双斜杠:

cscript //E:jscript //Nologo //U C:/path_to_coffeescript_compiler.js

出于某种原因cmd.exe(不是cscript.exe!)将双斜杠视为双反斜杠,并尝试解析显然失败的每个参数的网络名称,但不是经过一段时间的延迟。

这是进程监视器日志的一小段摘录:

cmd.exe     CreateFile     \\E:jscript\\             OBJECT PATH INVALID
cmd.exe     CreateFile     \\E:jscript \Nologo\\     BAD NETWORK PATH
cmd.exe     CreateFile     \\E:jscript \Nologo \U\   BAD NETWORK PATH
cmd.exe     CreateFile     \\Nologo\\                OBJECT PATH INVALID
cmd.exe     CreateFile     \\Nologo \U\              BAD NETWORK PATH

... 等等。

我能做些什么来防止这种情况发生?

4

2 回答 2

3

在我做了更多的黑客攻击之后,我终于找到了问题所在。罪魁祸首是 Comodo Internet Security,它将一个 DLL 注入到 cmd.exe 进程中,该进程进行了查找:

Do heuristic command-line analysis for certain applications选项的帮助文本:

选择此选项会指示 Comodo Internet Security 对能够执行代码(例如 Visual Basic 脚本和 Java 应用程序)的程序执行启发式分析。启用此选项影响的示例程序是 wscript.exe、cmd.exe、java.exe 和 javaw.exe。

感谢所有提供的解决方法。这些都不起作用的事实引导我找到原因:)

于 2012-04-30T13:58:35.553 回答
1

我不了解哪个过程有问题,但您可以尝试隐藏//上述过程。

想法1)将CSCRIPT命令放在一个批处理文件中,然后让ExecJS调用该批处理文件。

想法 2)延迟//使用 FOR 变量的出现

for %s in (/) do cscript %s%sE:jscript %s%sNologo %s%sU C:/path_to_coffeescript_compiler.js

注意 - 这并不能解释太多,但大多数 Windows 上下文将接受 a/代替\. 例如,DIR "C:/"等价于DIR "C:\"

于 2012-04-30T11:51:07.060 回答