2013-07-03 3 views
2

을 처리합니다공유 값이 같은 프로세스를 실행하고

의 localpath가 .DOCX 파일의 경로입니다
Process process = new Process(); 
process.StartInfo = new ProcessStartInfo(localpath); 
process.Exited += new EventHandler(process_Exited); 
process.EnableRaisingEvents = true; 
process.Start(); 

. 또한 단어 추가 기능이 있고 리본에 Import 단추가 있습니다. 일단은 어떤 값의 일단 종료, "안녕하세요"라고 말하며하도록 설정해야 누르면의 process_Exited() 메소드가 할 수 있어야한다 : 즉 내가 찾은 모든 때문에 가능하면

MessageBox.Show(the mysterious accessor for that "hi"); 

그러나, 나도 몰라 많은 사람들이 다른 프로세스에서 부모 폼에 액세스 할 수 없다고 말합니다. 그래서 나는 그 아이디어를 포기하고 싶습니다. "안녕"을 부모 양식 (다른 응용 프로그램에 있음)으로 보냈는데, 이것은 다음에해야할 일만큼 충분한 지표가 될 것입니다.

이 프로젝트를 사용해 보았지만, 내 메시지 상자는 두 개의 개별 응용 프로그램 (WORD 및 응용 프로그램)이기 때문에 부모가 아닌 동일한 창에 나타납니다. 나는 또한 주위 환경 ​​가치를 보내려고했지만, 나는 단지 그것을 자식에게서 얻을 수있다 (그리고 설정되지 않았다!).

그래서 자식 프로세스에서 부모 프로세스로 전달할 값을 얻는 방법이 있습니까?

답변

4

정보를 여러 가지 방법으로 전달할 수 있습니다.

하위 프로세스가 콘솔 응용 프로그램 인 경우 하위 콘솔에 값 (예 : Console.WriteLine)을 쓸 수 있습니다. 부모 프로세스는 자식의 출력을 리디렉션하여 읽을 수 있습니다. 예를 들어 Capturing console output from a .NET application (C#)을 참조하십시오.

작은 값으로 반환 할 수있는 값이 있다면 (예 : "안녕", "작별 인사", "도움말"등), 열거하여 하위 코드에서 0에서 종료 코드를 반환하도록 할 수 있습니다 N, 여기서 N은 가능한 값의 수입니다. 프로세스 종료 코드를 얻는 예제는 Get return value from process을 참조하십시오. 자식 프로세스 종료 코드를 설정하려면 Environment.ExitCode을 설정하거나 Main에서 값을 반환하십시오.

콘솔을 사용할 수없고 텍스트 데이터를 반환하려는 경우 프로세스 간 통신에 Named Pipes을 사용할 수 있습니다. 부모 프로그램은 파이프를 만들고 자식을 호출합니다. 자식은 파이프를 열고 데이터베이스를 부모에게 보내 종료합니다.

다른 가능성이 있지만 그 중 하나가 당신이 원하는대로 할 것이라고 생각합니다.

+0

예, 내 하위 프로세스는 MS 워드의 응용 프로그램이므로 명명 된 파이프가 있습니다. 감사! –

+0

@jimmischel, 프로그램에서 작동하지 않는 솔루션이 실행 중입니다. 매개 변수가있는 프로그램 시작에만 해당됩니다. – vanloc

+0

@ VănLộc : 나는이 대답에서 많은 가능한 "해결책"을 언급했다. 어느 것이 당신을 위해 일하지 않습니까? –

관련 문제