2009-09-08 3 views
1

다른 .NET 실행 파일을 호출해야하는 .NET Windows 응용 프로그램이 있습니다. 나는이 다른 exe를 메인 프로젝트의 일부로 배포하고 이것을 구현하는 가장 좋은 방법이 무엇인지 궁금해하고 있었다. 우리는이 두 번째 exe에서 코드를 가져 와서 주 프로젝트에 넣고 싶지 않습니다. 우리는 exe를 효과적으로 봉인해야하며, 우리는 또한이를 제 3 자에게 배포하기를 원합니다.주 응용 프로그램과 함께 배포되는 .NET exe를 어떻게 호출해야합니까?

옵션이 고려되고 :

  1. 나는 프로젝트 내 파일로 EXE 파일을 추가하고 '복사 항상'등의 출력에 복사를 설정 한 다음 바로 주요 응용 프로그램 폴더에서 실행해야합니까?
  2. 기본 프로젝트에서 참조로 exe를 추가해야합니까? 이 방법을 사용하면 매개 변수가있는 실행 파일로 어떻게 부를 수 있습니까?

위의 방법에 대한 지침에 대해 감사 드리며 실제로 다른 목표를 달성 할 수있는 방법이 있으면 감사하게 생각합니다.

감사합니다.

+0

개발 모드 (예 : Visual Studio)에서 실행 중이거나 배포가 완료되면 어떻게 실행하는지 궁금하십니까? 그것은 당신의 질문의 표현에서 완전히 명확하지 않습니다. –

+0

일단 배포하면 실행해야합니다. – JamesW

답변

5

EXE 파일의 코드를 실행하는 두 가지 방법이 있습니다

  • 별도의 프로세스로 : System.Diagnostics.Process를 사용하여 명령 줄 인수로 정보 전달은
  • 동일한 프로세스에서
  • 은 일반 .NET 방법을 사용하여 하시다 별도의 AppDomain

에서이 두 가지 모두를 동일한 프로세스에서

  • 를 호출 좋은 rk; 첫 번째 버전에서는 exe를 참조하는 기본 프로젝트가 필요하지 않습니다. 설치/배포 프로젝트에 프로젝트를 포함하십시오. xcopy 배포를 사용하는 경우 (즉, 출력 디렉터리의 내용을 가져 오는 것), exe에 대한 참조를 복사하여 가져올 수 있습니다.

    두 번째 양식을 사용하려면 프로젝트의 exe 파일에 대한 참조를 추가해야합니다. 처리중인 코드를 기꺼이 호출하면 가장 간단한 해결책이 될 수 있습니다.

    세 번째 형식은 참조를 사용할 수 있지만 반드시 사용해야하는 것은 아닙니다. 이것은 두 번째 옵션보다 많은 격리를 제공하지만 첫 번째 옵션보다 적은 격리를 제공합니다.

  • +0

    감사합니다. 매우 완전하고 유용한 답변! – JamesW

    +0

    @ 존 : 첫 번째 진술 ("두 가지 다른 방식")은 나열한 실제 방법과 충돌합니다. –

    0

    Dll 어셈블리로 만들 수도 있고 응용 프로그램에서 호출 할 수도 있습니다. 런타임에 어셈블리가로드되어 있으면로드하는 것이 좋습니다.

    +1

    참조 용으로 DLL을 만들 필요가 없습니다. –

    0

    기본 프로그램에서 exe의 클래스를 사용하고 싶지 않으면 해당 exe에 대한 참조를 추가해도 도움이되지 않습니다. 나는 당신의 첫 번째 옵션이 생각하는 최고의

    2

    출력에 복사은 물론 가장 간단한 솔루션입니다.

    이 exe를 응용 프로그램 파일과 함께 사용하지 않으려면 리소스에 넣고 응용 프로그램에서 해당 exe를 실행해야 할 경우 임시 폴더에 저장하고 거기에서 실행하십시오.프로젝트 속성에서

    class Program 
    { 
        static void Main(string[] args) 
        { 
         var fileName = Path.ChangeExtension(Path.GetTempFileName(), "exe"); 
         File.WriteAllBytes(fileName, Resources.QueryExpress); 
         var queryAnalyzer = Process.Start(fileName); 
         queryAnalyzer.WaitForExit(); 
        } 
    } 
    

    는 자원과 거기에 드래그 앤 드롭하여 exe 파일로 이동 :

    다음은 개념 증명 코드입니다. 이 샘플에서는 QueryExpress.exe이라는 응용 프로그램을 사용하고 있습니다.

    앱을 ZIP 파일로 압축하여 작게 만들 수도 있습니다. 그러면 프로세스를 실행하기 전에 아카이브 압축을 푸는 데 필요한 단계가 하나 더 추가됩니다.

    +0

    +1 이것은 최종 사용자가 두 번째 실행 파일을 직접 실행 (또는 알 수있는 경우)하기가 더 어려워 지도록하는 것이 가장 중요한 경우 가장 좋은 옵션입니다. 존의 대답에 언급 된 옵션은이를 달성하지 못합니다. – Ash

    관련 문제