2012-04-30 3 views
1

일부 배경 : 내 레일 환경에서 나는 자바 스크립트 파일을 실행하기 위해 Windows 스크립트 호스트를 사용 ExecJS를 사용 커피 스크립트을 사용하고 있습니다.cscript.exe와 함께 이중 슬래시를 사용할 때 cmd.exe가 네트워크에 충돌하는 것을 방지하려면 어떻게해야합니까?

CoffeeScript 파일을 컴파일 할 때 불행하게도 (30 초 초과) 큰 지연이 발생합니다.

프로세스 탐색기와 프로세스 모니터를 사용하여 이미 명령 줄을 원인 중 하나로 확인했습니다. (!하지 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 

... 그리고 :

여기에 작은 프로세스 모니터 로그의 발췌입니다.

이 문제를 방지하려면 어떻게해야합니까?

+0

음 ... 나는 이것을 재현 할 수 없다. (procmon은 아무런 활동도 가짜 네트워크 경로를 고려하지 않는다). 'cscript'를 다른 것으로 대체하면 어떻게됩니까? 예를 들어'echo'.만약 정말로'cmd.exe'가 여기서 재미있는 일을한다면, 그곳에서 일어날 것입니다. 또한 대화 형 쉘이나 배치 파일에서'cscript'를 호출 할 것인가? 'echo % CMDCMDLINE %'의 출력을 게시하고 싶을 수도 있습니다. –

+0

재밌 네요,'echo' 나 다른 실행 파일에서는 발생하지 않지만'wscript.exe'에서 일어납니다. 커맨드 라인은'ExecJS'에 의해 생성되며,'cmd.exe'는'/ c' 스위치로 시작됩니다. 또한 * 매 통화마다 지연이 발생하지 않습니다. ExecJS에서 거의 모든 시간이 걸리지 만 내 커맨드 라인에서는 거의 반 시간이 걸립니다. –

+0

예를 들어 실제 명령 줄을 보았다고 가정합니다. 프로세스 익스플로러 (Process Explorer), 어떤 이유로'cmd/C // E : ... '와 같은 것을 생성 할 수 있습니까? 즉 실수로'cscript.exe'를 생략 할 수 있습니까? 또한 단순히 CMD 창에서'cmd/c "cscript // E : jscript // Nologo // U C : /path_to_coffeescript_compiler.js"'를 실행하면 오류가 발생합니까? –

답변

3

더 많은 해킹을 한 후에 마침내 문제가 발견되었습니다. 범인은 조회했던 cmd.exe를 프로세스에 DLL을 주입하는 코모도 인터넷 시큐리티이었다 옵션에 대한

도움말 텍스트를 특정 응용 프로그램을위한 휴리스틱 명령 줄 분석을 수행

이 선택을 옵션은 Visual 기본 스크립트 및 Java 응용 프로그램과 같은 코드를 실행할 수있는 프로그램의 휴리스틱 분석을 수행하도록 Comodo Internet Security에 지시합니다. 이 옵션을 사용하는 의 영향을받는 예제 프로그램은 wscript.exe, cmd.exe, java.exe 및 javaw.exe입니다.

제공되는 해결 방법이 모두 유용합니다. 이들 중 아무도 원인을 찾지 못했다는 사실 :

1

어떤 프로세스가 잘못되었는지 이해할 수 없지만이 프로세스에서 //을 숨길 수 있습니다.

아이디어 1) CSCRIPT 명령을 배치 파일에 넣은 다음 ExecJS에서 배치 파일을 호출하게하십시오.

아이디어 2) 지연 변수

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

참고 for 문을 사용하여 //의 모양 -이 많은 설명하지 않지만, 대부분의 Windows 컨텍스트는 \ 대신에 /을 받아 들일 것입니다. 예를 들어 DIR "C:/"DIR "C:\"과 같습니다.

+0

좋은 아이디어 였지만 둘 다 큰 차이가 없었습니다. 나는'for' 변형에 대한 높은 기대를 가지고있었습니다 ... –