2011-12-15 4 views
3

이 두 문장으로 인해 표시된 예외가 발생하는 이유를 아는 사람이 있습니까?Runtime.exec에서 "시스템이 지정된 파일을 찾을 수 없습니다"는 원인은 무엇입니까? (assoc/ftype)

Runtime.getRuntime().exec("assoc .vlan=\"file type description\""); 
Runtime.getRuntime().exec("ftype \"file type description\"=" + System.getProperty("user.home")+ "\\folder 1\\folder 2\\my executable.exe\" /inject \"%1\""); 

그리고 여기 예외가 있습니다.

java.io.IOException: Cannot run program "assoc": CreateProcess error=2, The system cannot find the file specified 
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
at java.lang.Runtime.exec(Runtime.java:615) 
at java.lang.Runtime.exec(Runtime.java:448) 
at java.lang.Runtime.exec(Runtime.java:345) 

좋아, 나는이 변경했지만 바로 그 명령을 실행하고 cmd 명령 프롬프트에서 작업 반면 여전히 연결이 이루어지지 않습니다.

Runtime.getRuntime().exec("cmd.exe /c assoc .vlan=\"file type description\""); 
Runtime.getRuntime().exec("cmd.exe /c ftype \"file type description\"=\"" + System.getProperty("user.home") + "\\folder 1\\folder 2\\my executable.exe\" /inject \"%1\""); 

무료 제안이 있습니까? 고맙습니다!

+0

exec ("assoc .vlan = \"파일 형식 설명 \ "");'파일 연결을 만드는 경우 [Java Web Start] (http://stackoverflow.com/tags/java- web-start/info)는 앱에 대한 파일 연결을 추가 할 수 있습니다. 또한 Windows, OS X & * nix에서도이 작업을 수행 할 수 있습니다. [데모. ..demo 및 다운로드 할 수있는 소스에 대한 파일 서비스] (http://pscode.org/jws/api.html#fs). –

답변

7

결과적으로 assocftype은 내장 쉘 명령이며 실행 파일이 아닙니다. copy, dir 등의 경우도 마찬가지입니다. 대신 /c 매개 변수를 사용하여 cmd.exe을 실행하여 명령 줄 문자열을 전달할 수 있습니다. cmd.exe /c assoc ....

+0

답장을 보내 주셔서 감사합니다. 예외는 없지만이 방법으로 시작할 때 연결이 발생하지 않습니다. 그러나 동일한 루틴이 명령 프롬프트에서 실행될 때 정상적으로 작동합니다! 의견을 부탁합니다! – Sam

+0

Windows Vista 이상에서 실행하는 경우 명령에 상승 된 권한이 필요합니다 (레지스트리에 쓰일 때까지). 그렇지 않으면 "액세스 거부"오류가 표시됩니다. 'exec()'호출이 리턴하는'Process' 객체에서'waitFor'를 사용하여 에러 코드를 캡쳐하십시오. 아마도 0이 아닌 것으로 나타납니다 (아마도 5는 액세스가 거부되었음을 나타냅니다). – bobbymcr

+0

Spot on! 감사합니다 10 억! 이제 내 마지막 질문으로! 상승 된 모드에서이 명령을 어떻게 실행할 수 있습니까 ?? 나는 전에 그것을하지 않았다! – Sam

관련 문제