2013-09-01 3 views
7

Java 응용 프로그램에서 RemoveDrive.exe, found here을 사용하려고합니다. 내 JAR 파일이 있고 다음 코드를 사용하여 임시 파일로 압축을 풀고 있는데, 실행하려고하면 IOExceptionCreateProcess error=5, Access is denied이됩니다. 프로그램은 일반적으로 관리자 권한이 필요하지 않습니다. 문제를 일으킬 수있는 아이디어가 있습니까?% AppData에서 .exe를 실행하려고하면 액세스가 거부되었습니다. %

  File RDexe = File.createTempFile("rmvd", ".exe"); 

      InputStream exesrc = (InputStream) GraphicUI.class.getResource("RemoveDrive.exe").openStream(); 
      FileOutputStream out = new FileOutputStream(RDexe); 

      byte[] temp = new byte[1024]; 
      int rc; 

      while((rc = exesrc.read(temp)) > 0) 
       out.write(temp, 0, rc); 

      exesrc.close(); 
      out.close(); 

      RDexe.deleteOnExit(); 

      // run executable 
      Runtime runtime = Runtime.getRuntime(); 
      System.out.println(RDexe.getPath() + " " + "F:\\" + " -b -s"); 
      Process proc = runtime.exec(RDexe.getPath() + " " + "F:\\" + " -b"); 
      InputStream is = proc.getInputStream(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

      String line; boolean ejected = false; 
      while((line = reader.readLine()) != null) 
       if(line.equalsIgnoreCase("failed")) ejected = false; 
       else if(line.equalsIgnoreCase("success")) ejected = true; 

      reader.close(); 
      is.close(); 

업데이트 : 기본 제공 관리자 계정 (net user administrator /active:yes)를 사용하는 경우이 모든 것이 거기에서 잘 작동합니다. 그러나 표준 계정에서 관리자 권한으로 마우스 오른쪽 버튼을 클릭하여 실행하면 여전히 오류가 발생하고 UAC는 권한을 요청하지 않습니다.

편집 : 현상금이 거의 완성하지만, 내가이 문제를 해결 도움이되었습니다 my SuperUser question를 참조하십시오으로 보는 ... 난 현상금을 수여 곧 답변을 받아 수 있습니다.

+0

아마도 체크 아웃 http://stackoverflow.com/questions/6674431/possible-causes-of-java-io-ioexception-createprocess-error-5 – demongolem

+0

@ demongolem 나는 그 질문에 대한 정보를 알고있다. 그래도 내 문제를 해결하는 데 도움이되지 않습니다. – Andy

답변

1

Java와는 아무런 관련이 없습니다.

원래 질문에 링크 된 수퍼 유저 질문에 언급했듯이 내 평소 계정에 알 수없는 이유로 소유권이없는 것으로 나타났습니다. 아무 것도 실행할 수 없었습니다. 자바에서 만든 임시 파일이 아니 었습니다.

관리자인데도 폴더의 소유권을 가져 오기 위해 기본 제공 관리자 계정을 사용하고 소유권을 부여해야했습니다. 내가 그랬던 이래로, 그것은 모두 예상대로 일했다.

그들의 노력 덕분에, 나는 가장 상세한 대답에 대해 현상금을 수여하고 올바른 길로 나를 안내 할 것입니다.

2
  1. 나는 자바 사용자가 아니지만 32 대 64 비트 문제입니까?

    64 비트 Windows 오류 코드 5에서 일반적으로 실행 파일은 64 비트와 호환되지 않습니다. 때로는 이것은 더 이상 존재하지 않는 일부 (오래된 win) 시스템 디렉토리에만 액세스 할 필요가있는 경우에도 해당됩니다. 이것을 증명하려면 실행 파일을 명령 줄에서 사용하십시오. 당신이 그곳에서 일하게하는 것을 관리 할 수 ​​있다면 그것은 다른 이슈입니다. 해당 OS에 맞는 실행 파일이없는 경우.

  2. 또 다른 가능성은 파일이 실제로 일부 드라이브에 있어야한다는 것입니다.

    당신은 임시로 가지고 있다고 썼습니다. JAVA의 의미가 무엇인지 알려주지 않습니다. 그것은 단지 그것을 일부 파일에 복사하고 사용 후 OK를 선택하면 메모리 이외에는 문제가 될 수 있지만, 실행 파일 자체에 액세스해야하는 경우 문제가 될 수 있습니다. 이것을 증명하려면 파일을 알려진 위치로 복사 한 다음 거기에서 실행하십시오 (JAVA). 그것보다 작동하는 경우에 당신이 그것에 대해 뭔가 할 필요가 (복사 및 이전과 물리적 디스크 매체 또는 무엇을 실행 후 JAVA에서 실행 삭제)합니다

  3. 또 다른 가능성은 오류 코드 5는 자바 환경에서 유래 인 아니이 경우 OS

    에서 나는 (안 JAVA 사용자)의 의미하지 단서 무선의

+0

답변 해 주셔서 감사합니다. 나는 당신이 1 점을 쳤다고 생각했지만 그렇지 않은 것 같습니다. 그것은 바로 거기에있는 실행 파일을 포함하여 Temp 디렉토리에서 아무 것도 실행할 수없는 것 같습니다. 심지어 마우스 오른쪽 버튼을 클릭하고 "관리자 권한으로 실행"을 눌러도 OS 관련 문제가 더 많습니다. 그러나 심층적 인 답변 +1! :) – Andy

0

어떤 버전이 너는 지금 뛰고 있니? Microsoft는 Windows 7에서 프로그램을 실행하는 것에 대한 제한을 상당히 강화했습니다. 내 생각에 OS는 프로그램을 시작한 시점에 인증되지 않은 것을 포크하는 것을 허용하지 않습니다. Windows 2000 또는 XP에서 실행하고 동일한 문제가 있는지 확인하려고합니다.

+0

답장을 보내 주셔서 감사합니다. 천천히 회신 드리며 죄송합니다. 나는 Windows 7을 실행 중입니다. 그러나 대답에 영감을 받았습니다. 두 Windows 7 다른 컴퓨터의 Temp 폴더에서 실행 파일을 실행 해 보았습니다. (같은 방식으로 설정 한 것 같습니다.) 실행 파일은 해당 컴퓨터에서 제대로 실행되었습니다. . 내 노트북에 대한 액세스를 거부 할 수있는 아이디어가 있습니까? – Andy

4

상황에 따라 문제가되지 않을 수도 있지만 일부 바이러스 백신 프로그램은 임시 폴더 내의 실행 파일이나 스크립트가 실행되지 못하게합니다.대신에 임시 파일을 생성하는 사용자 디렉토리에 넣어보십시오

File rdExe = new File(System.getProperty("user.home") + "/.yourProgramName/rmvd.exe"); 
rdExe.getParentFile().mkdirs(); 
+0

+1 답변 해 주셔서 감사합니다. 필자의 경우에는 문제가되지 않지만 (이 문제를 해결할 수 있었기 때문에)이 위치를 임시 파일의 페일 세이프로 사용할 수 있습니다. 이것이 참으로 가장 좋은 장소일까요? – Andy

+0

죄송합니다, 내 대답을 게시 한 후 솔루션을 읽어보십시오. 사용자는 항상이 [폴더] (http://en.wikipedia.org/wiki/Home_directory)에 액세스 할 수 있어야합니다. 자신의 코드를 정리 한 후에 만 ​​정리할 계획이면 괜찮습니다. 나는 아마 그것을 '숨겨진'폴더 (대답 업데이트)에 넣을 것이다. – Lunchbox

+0

업데이트 해 주셔서 감사합니다. 나는 홈 디렉토리를 fail safe 임시 디렉토리로 만들 것이다. – Andy

2

단지 머리를 파일을 실행하는 또 다른 방법에, 당신은 자바 데스크탑 객체를 사용하는 생각? : http://docs.oracle.com/javase/6/docs/api/java/awt/Desktop.html

내 Java 프로그램을 통해 프로그램을 실행해야 할 때 유용하다고 생각했습니다. 이 같은 당신을 위해 일할 수 :

Desktop.getDesktop().open(new File("enter path and name of the file")); 

당신이 찾을 희망이 도움이 단지 여기에 감동 된 것처럼, 나는이 문제가 Windows에서 권한과 관련,이고 것을 말할 것보고

+0

답변 해 주셔서 감사합니다. 나는'데스크톱 '을 알고 있지만, 실제로 이것을 사용하는 것을 결코 고려하지 않았습니다. 불행히도이 문제는 Java가 아닌 Windows와 관련되어 있기 때문에 아무 것도 해결하지 못했습니다. – Andy

+0

아아아, 알았어. 내가 전에 시도했던 방식대로 시도했기 때문에 도움이 될 거라 생각했는데, '액세스가 거부되었습니다'라는 오류를주었습니다.하지만 데스크톱 개체가 도움이되었습니다. 당신이 그것을 시도하지 않은 경우, ID는 그것을 권장합니다 .. 아무것도 잃지 만 당신은 절대 알지 못합니다 :) –

+0

나는 그것을 시도 할 것이지만, 그것은 소유권 변경을 되돌리기위한 종류의 고통이며, 나는 확실히 그것을 확신합니다. 문제가 관련이없는 것과 같은 오류가 발생했습니다. 또한 Desktop 개체를 사용하여 명령 줄 매개 변수를 전달할 수 있는지 확실하지 않습니다. – Andy

관련 문제