2017-01-08 10 views
1

내 항아리 프로그램에 대한 "시작 프로그램"을 만들고 싶습니다. 기본적으로 내 exe 파일은 자체 항아리 프로그램을 시작하기위한 것으로서 아무것도하지 않습니다.왜 "Win32Exception"이 발생합니까?

내 jar 프로그램이 파일을 열 수 있습니다. OS가 명령 줄 인수를 사용하여 파일을 여는 경로를 포함하는 파일을 열면 파일이 열립니다. 파일?

나는 그것이 잘 작동 Visual Studio에서 재생 버튼을 사용하여 내 프로그램을 실행하면

, 나는 속성 -> Debug-> 명령 줄 인수에 인수를 넣어, 내 항아리를 시작하고 내 파일

내가 실행하면 열립니다 CMD에서 내 프로그램은 cmd를 통해 인수를 통과뿐만 아니라, 그것은 잘 작동하고 다시 한번 파일을 엽니 다.

그러나 내가 열고 싶은 파일을 마우스 오른쪽 버튼으로 클릭하면 "열기"... System.ComponentModel.Win32Exception이 발생합니다.

아마도 프로그램을 설치해야한다고 생각했기 때문에 innoSetup installe r,하지만 만약 내가 오른쪽 클릭 -> 열기 ... Win32Exception을 얻을

내가 뭘 잘못하고있어?


내 코드 : 문제가 C#으로 명확하기 때문에

class Program 
     { 
      static void Main(string[] args) 
      { 
       var programa = new System.Diagnostics.Process(); 
       programa.StartInfo.UseShellExecute = true; 
       programa.StartInfo.FileName = "Personas.jar"; 
       String archivo ; 
       try 
       { 
        archivo = args[0]; 
       }catch(System.IndexOutOfRangeException e) 
       { 
        archivo = null; 
       } 
       if(archivo != null) 
       { 
        programa.StartInfo.Arguments = archivo; 
       } 
       try 
       { 
        programa.Start(); 
       }catch(Exception err) 
       { 

       } 
      } 
     } 

내가 자바 코드를 삽입하지 않습니다

The exception

+0

단순히 jar 파일이 PE 실행 파일이 아닌 일반 아카이브이기 때문입니다. 스페인에서 C#을 이해하지 못한다고해도 java -jar nameOfJar.jar로 시작해야합니다. 원인이라고 생각합니다. – glee8e

+0

무엇을 마우스 오른쪽 버튼으로 클릭합니까? 그리고 "open with"다음에 나오는 대화 상자에서 무엇을 선택합니까? 힌트 : 작업 디렉토리 –

+0

@ glee8e를 확인하십시오. JAR 파일이 Javaw.exe와 연결되어 있다면 작동합니다. –

답변

0

당신은 비주얼 스튜디오를 사용하여 응용 프로그램을 실행하는 현재 디렉토리는 실행중인 실행 파일의 디렉토리로 설정됩니다. 나는 당신의 personas.jar 파일이 당신의 실행 파일과 같은 디렉토리에 있다고 추정한다. 그래서 ShellExecute = true를 사용하여 jar 파일을 열 때, 파일은 연관을 찾아 성공적으로 실행된다.

CMD를 사용하는 경우 현재 디렉토리가 위와 같이 설정되고 모든 것이 다시 계획대로 작동하도록 CMD를 실행할 수 있습니다.

그러나 연결 프로그램 ...을 사용하여 파일을 열면 현재 디렉터리가 마우스 오른쪽 단추로 클릭 한 파일이있는 디렉터리로 설정됩니다. 즉, ShellExecute를 사용하여 personas.jar을 열려고하면 클릭 한 파일의 디렉토리를보고 찾을 수 없습니다. 그래서 실패.

실행중인 어셈블리의 경로를 가져와 현재 디렉토리를 설정하거나 personas.jar에 대한 경로를 완전히 한정해야합니다.

또한 Association에 의해 파일을 여는 동안 StartInfo 개체의 Arguments 속성을 사용하는 것은 문서화 된 사용이 아닙니다. 그래서 지금은 작동 할 수 있지만 어떤 시점에서 작동을 멈출 수 있습니다.

+0

당신이 말한대로 작동하지 않을 것입니다,하지만 또한 내 응용 프로그램의 동일한 디렉토리에 내 파일을 복사하려고 했으므로 현재 디렉토리는 파일, 항아리 및 내가 원하는 파일 모두에 대해 동일합니다 열어도 작동하지 않았다. 어쨌든 나는 항아리 파일의 전체 경로를 시도 할 것이고 작동하는지 알려줄 것이다. 감사 –