いくつかの背景:私のRailsの環境では、私は、JavaScriptファイルを実行するためにWindowsスクリプティングホストを使用していますExecJSを使用していますCoffeeScriptのを使用しています。cscript.exeで二重スラッシュを使用するとcmd.exeがネットワークに侵入しないようにするにはどうすればいいですか?
CoffeeScriptファイルがコンパイルされると、残念ながら私は巨大な遅延(> 30秒)を経験しています。
プロセスエクスプローラとプロセスモニタを使用する私はすでにコマンドラインを原因の1つとして特定しました。 (!ないcscript.exe
)何らかの理由cmd.exe
については
cscript //E:jscript //Nologo //U C:/path_to_coffeescript_compiler.js
ではなく、いくつかの遅延の後、二重のバックスラッシュとダブルスラッシュを扱い、明らかに失敗した各パラメータのネットワーク名を解決しよう: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
...と:
はここで小さなプロセスモニタログの抜粋です。
これを防ぐにはどうすればよいですか?
うーん...私はこれを再現することができません(procmonはアクティビティに関する偽のネットワークパスを示していません)。 'cscript'を何か他のもの、例えば' echo'で置き換えるとどうなりますか?本当に 'cmd.exe'が面白いことをしているのであれば、それもそこで起こるはずです。また、対話的なシェルやバッチファイルから 'cscript'を呼び出します。 'echo%CMDCMDLINE%'の出力をポストしたいかもしれません。 –
面白いですが、 'echo'やその他の実行可能ファイルでは起こりませんが、' wscript.exe'で起こります。コマンドラインは 'ExecJS'によって生成され、' cmd.exe'を '/ c'スイッチで起動します。また、すべての*コールで遅延が発生しません。 ExecJSからはほとんど毎回ですが、自分のコマンドラインからはこれまでの半分の時間がかかります。 –
私は実際のコマンドラインを見たと思います。プロセスエクスプローラですが、なんらかの理由で 'cmd/C // E:...'のようなものを生成することがあります。つまり、誤って 'cscript.exe'を除外していますか?また、 'cmd/c" cscript // E:jscript // Nologo // U C:/path_to_coffeescript_compiler.js "'を単純なCMDウィンドウから実行するだけで、エラーも発生しますか? –