2013-07-25 2 views
5

바로 가기에서 메모장이나 다른 응용 프로그램을 열 수있는 방법이 있습니까? ,.exe 바로 가기를 실행하는 Java 코드

import java.io.File; 
import java.io.IOException; 

public class acrobat { 

    public static void main(String[] args) throws IOException, InterruptedException { 
     String[] notepad = {"C:\\Users\\Desktop\\notepad.lnk"}; 

     Process p = Runtime.getRuntime().exec(notepad); 
     p.waitFor(); 
    } 
} 

내가 바로 가기에서 응용 프로그램을 열려면,하지만 난 오류가 무엇입니까 ..

Exception in thread "main" java.io.IOException: Cannot run program "C:\Users\robert\Desktop\notepad.lnk": CreateProcess error=193, %1 is not a valid Win32 application 
    at java.lang.ProcessBuilder.start(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 
    at acrobat.main(acrobat.java:11) 
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(Unknown Source) 
    at java.lang.ProcessImpl.start(Unknown Source) 
    ... 4 more 

난 단지 그 작업보다 notepad.exe를 쓰기 만하는 경우 :

여기 내 코드입니다 경로가 작동하지 않습니다. 바로 가기로 열 수있는 방법이 있습니까?

+6

바로 가기의 확장자는'.lnk'이므로 프로그램이 지정한 파일을 찾을 수 없습니다. '.exe'는 프로그램 폴더에 있고,'.lnk'은 바탕 화면 바로 가기를 프로그램 폴더의 실행 파일에 연결합니다. 바탕 화면의'notepad.lnk'을 찾아야합니다. – BackSlash

+0

콘솔 열기, 경로로 이동 ,'dir'을하면 어떤 파일이 있는지 볼 수 있습니다. – m0skit0

+1

그래서, C : \\ Users \\ Desktop \\ notepad.lnk 그게 작동하지 않는 날 도와주세요, 같은 오류가 발생 !! –

답변

7

바탕 화면에 나타나는 바로 가기는 실제로 확장자가 .lnk 인 파일입니다. "... CreateProcess를 오류 올바른 Win32 응용 프로그램이 아닙니다"는 을 얻을 것입니다 exec()을 통해 그것을 실행하려고

C:\Users\Desktop\notepad.exe.lnk 

오류 : 그런 다음, 실제 전체 경로가 있습니다.


다행히, 당신은 ProcessBuilder 유틸리티 클래스를 통해뿐만 아니라 사람들을 실행할 수 있습니다.

public static void main(String[] args) throws Exception { 
    ProcessBuilder pb = new ProcessBuilder("cmd", "/c", 
             "C:\\Users\\robert\\Desktop\\notepad.lnk"); 
    Process p = pb.start(); 
    p.waitFor(); 
} 



당신이 해야 사용 Runtime.getRuntime().exec(), 당신은 rundll32을 통해 lnk 파일을 열 수있는 경우 :

Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + 
             "C:\\Users\\robert\\Desktop\\notepad.lnk"); 
p.waitFor(); // watch out 

을하지만이 방법에 의해, 염두에 두어야의 p.waitFor(); 유사한 메소드 호출에는 expe가 없을 수도 있습니다. Cted 결과 : 보시다시피 생성 된 프로세스는 rundll32이지 바로 가기 (notepad.exe)이 아닙니다.

+0

사실이 하나 내가 어떤 오류가 발생하지 않았다! 작동하지 않습니다,하지만 개방하지 메모장 김, 저를 도와주세요 !! 감사합니다 !! –

+0

은 어느 당신은 하하 !!!! 정확히? – acdcjunior

+0

내가 모두 실제로 시도, 시도 않았다 ....하지만 작동하지 않습니다 그 이유를 난 몰라! :(그것은 나에게 오류를 포기하지 않았다! ProcessBuilder pb = new ProcessBuilder ("cmd", "/ c", "C : \\ Users \\ robert \\ Desktop \\ notepad.lnk"); –

2

Desktop.open(File) 및 관련 방법을보십시오.

  • '벌거 벗은'프로그램을로드하는 것보다 텍스트 파일의 기본 편집기를 여는 것이 더 중요합니다.
  • 파일 연결이있는 모든 파일에서 작동합니다.
  • OS X & * nix에서 작동합니다.
  • 그것은 당신이 정말로 링크를 열해야하는 경우 ..

    그러나 TextPad를, 또는 MS Word에서 텍스트 파일을 편집하는 것을 선호 사용자 또는 ..


을 멀리하지

을 모두 읽고When Runtime.exec() won't의 권장 사항을 읽고 구현하십시오. 그게 문제를 해결할 수도 있습니다. 그렇지 않은 경우 실패한 이유에 대한 자세한 정보를 제공해야합니다.그런 다음이를 무시하고 exec을 말하고 ProcessBuilder을 사용하여 Process을 만듭니다. 또한 공백을 포함하는 인수를 고려하여 String argString[] args으로 나눕니다.

+1

더 일반적인 교차 플랫폼 접근 방식의 경우 +1. – trashgod

+0

@trashgod 독점적으로 Windows 용 코드를 작성하려면 .Net을 사용하십시오. 2-3 코드 줄을 사용하여 신뢰할 수있는 방식으로이 작업을 수행 할 수 있습니다. 받아 들여진 응답이 강력한 버전으로 처리 될 즈음에는 최소한 Java의 10-15 라인이 될 것입니다. –

+1

이상, 나는이 [forerunner] (http://javadesktop.org/articles/jdic/)를 기억합니다. 단지 BrowserLauncher''를 생각 나게 – trashgod