Ruby on rails 3 如何防止cmd.exe在使用cscript.exe的双斜杠时击中网络?

Ruby on rails 3 如何防止cmd.exe在使用cscript.exe的双斜杠时击中网络?,ruby-on-rails-3,cmd,coffeescript,wsh,execjs,Ruby On Rails 3,Cmd,Coffeescript,Wsh,Execjs,一些背景:在我的Rails环境中,我使用CoffeeScript,它使用ExecJS,它使用Windows脚本主机执行Javascript文件 不幸的是,在编译我的CoffeeScript文件时,我遇到了巨大的延迟(>30秒) 使用Process Explorer和Process Monitor,我已经确定命令行是原因之一cscript.exe要求其参数使用双斜杠: cscript //E:jscript //Nologo //U C:/path_to_coffeescript_compiler

一些背景:在我的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
。。。等等


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

我不知道哪个进程出错,但您可以尝试对所述进程隐藏
/

Idea 1)将CSCRIPT命令放入批处理文件,然后让ExecJS调用批处理文件

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

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

注意-这并不能解释太多,但大多数Windows上下文将接受
/
而不是
\
。例如,
DIR“C:/”
相当于
DIR“C:\”

我不知道哪个进程出错,但您可以尝试对所述进程隐藏
/

Idea 1)将CSCRIPT命令放入批处理文件,然后让ExecJS调用批处理文件

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

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

注意-这并不能解释太多,但大多数Windows上下文将接受
/
而不是
\
。例如,
DIR“C:/”
相当于
DIR“C:\”

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

选项的帮助文本对某些应用程序进行启发式命令行分析

选择此选项将指示Comodo Internet Security对 能够执行visual basic等代码的程序 脚本和java应用程序。受影响的示例程序 启用此选项的有wscript.exe、cmd.exe、java.exe和javaw.exe


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

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

选项的帮助文本对某些应用程序进行启发式命令行分析

选择此选项将指示Comodo Internet Security对 能够执行visual basic等代码的程序 脚本和java应用程序。受影响的示例程序 启用此选项的有wscript.exe、cmd.exe、java.exe和javaw.exe


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

嗯。。。我无法重现这一点(procmon显示没有关于虚假网络路径的活动)。当您将
cscript
替换为其他内容时会发生什么情况,例如
echo
。如果真的
cmd.exe
在这里做了一些有趣的事情,那么它也应该发生在那里。另外,您是从交互式shell还是从批处理文件调用
cscript
。您可能想发布
echo%cmdline%
的输出。有趣的是,它不会发生在
echo
或任何其他可执行文件中,而是发生在
wscript.exe
中。命令行是由
ExecJS
生成的,在那里它通过
/c
开关启动
cmd.exe
。而且,并非每次通话都会出现延迟。从ExecJS来看,几乎每次都是这样,但从我自己的命令行来看,大约有一半的时间都是这样。我假设您确实看到了实际的命令行,例如Process Explorer,但可能是因为某种原因,它生成了类似于
cmd/C//e:…
,即意外地忽略了
cscript.exe
?另外,当您从普通cmd窗口简单地运行
cmd/c“cscript//E:jscript//Nologo//U c:/path_to_coffeescript_compiler.js”
时,是否也会发生错误?不,
cscript
实际上就在那里。(否则我的CoffeeScript文件将无法编译)手动调用
cmd/c“cscript…”
显示相同的行为。嗯。。。我无法重现这一点(procmon显示没有关于虚假网络路径的活动)。当您将
cscript
替换为其他内容时会发生什么情况,例如
echo
。如果真的
cmd.exe
在这里做了一些有趣的事情,那么它也应该发生在那里。另外,您是从交互式shell还是从批处理文件调用
cscript
。您可能想发布
echo%cmdline%
的输出。有趣的是,它不会发生在
echo
或任何其他可执行文件中,而是发生在
wscript.exe
中。命令行是由
ExecJS
生成的,在那里它通过
/c
开关启动
cmd.exe
。而且,并非每次通话都会出现延迟。从ExecJS来看,几乎每次都是这样,但从我自己的命令行来看,大约有一半的时间都是这样。我假设您确实看到了实际的命令行,例如Process Explorer,但可能是因为某种原因,它生成了类似于
cmd/C//e:…
,即意外地忽略了
cscript.exe
?另外,当您简单地运行
cmd/c“cscript//E:jscript//Nologo//U c:/path\U to\U coffeescript时,是否也会发生错误_