2010-08-18 5 views
2

Compact Framework 2.0 프로젝트에서 작업 중이며 프로세스를 사용하여 다른 프로그램 "A"에서 "B"프로그램을 시작하려고합니다. 스타트. 전에 여러 번 해본 적이 있지만 이번에는 이상한 문제가 있습니다.System.Diagnostics.Process.Start를 사용하여 프로그램을 실행하면 MissingMethodException이 발생합니다.

프로그램 "B"가 실행되지만 MissingMethodException이 발생합니다. 기본적으로 참조 된 특정 어셈블리가 누락되었음을 알려줍니다. 문제는 어셈블리 .dll이 프로그램 "B"와 같은 폴더에 있음을 나타냅니다. 프로그램 "B"를 두 번 클릭하면 MissingMethodException없이 올바르게 실행됩니다.이 문제가 발생하는 것은 프로그램 "A"에서 Process.Start로 시작될 때뿐입니다. 나는 여기서 무슨 일이 일어나는지 전혀 모른다. 나는 행운과 함께 WorkingDirectory 속성을 설정하려고했습니다. Process.Start를 통해 실행될 때 프로그램이 참조를로드 할 수없는 이유에 대한 아이디어가 있습니까? 감사합니다

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      ProcessStartInfo startInfo = new ProcessStartInfo(programBFullPath, "argument"); 

      //I've been changing these two properties, have tried shell execute with both false and true, tried setting working directory and not setting it also 
      startInfo.UseShellExecute = false; 
      startInfo.WorkingDirectory = programBDirectory; 

      proc.StartInfo = startInfo; 
      proc.Start(); 

편집이 난 그냥 뭔가 ... 프로그램 "A"및 프로그램 "B"프로그램 "B"가로드되지 않는 .DLL을 사용하여 두 생각했다. 두 프로그램이 같은 .dll을 동시에로드 할 수없는 경우 문제가됩니다. 이 경우인가요?

+0

직접 B 프로그램을 시작하면 어떻게됩니까? 나는 그것을 더블 클릭하는 것을 의미합니다 ... 편집 : 죄송합니다, 질문에 몇 줄을 놓 쳤습니다 : D – munissor

답변

1

글쎄 나는 프로그램 B의 어셈블리에 참조 된 코드를 복제하고 모든 참조를 제거함으로써 작동하게 만들었다. 그것은 우아하고는 거리가 멀지만, 다른 어떤 방식으로도 작동시키지 못했습니다. 누군가가 잘못되었을 수도있는 것에 대해 어떤 생각이 든다면 크게 감사 할 것입니다. 다른 시간에 유용 할 수도 있습니다. 감사합니다

1

메모리 부족 현상은 어떻게 보입니까? 프로그램 B가 어셈블리 C를 사용하지만 어셈블리 C를로드하기에 불충분 한 메모리 (가상 또는 실제)가 있으면 OutOfMemoryException 대신 MissingMethodException이 발생합니다. OutOfMemoryException 대신 항상 더 적합하다고 생각합니다.

+0

메모리가 충분하다고 생각합니다. 이제는 원래의 대답에 추가 한 것이 문제 일 수 있습니다. 동일한 .dll을 두 번로드 할 수 없습니까? – JayPea

+0

동일한 어셈블리를 사용할 수있는 이유가 없습니다. 그들은 GACed가 아닌 한 각각 자신의 복사본을로드 할 것입니다. 그들은 둘 다 같은 버전의 DLL을 사용하도록 컴파일되어야합니다 (또는 현재 가지고있는 DLL을로드 할 수 있는지를 알려주는 앱 설정 항목이 있어야합니다). – ctacke

+0

동일한 솔루션에 있으며 참조가 동일한 솔루션의 프로젝트에 추가되므로 동일한 버전을 실행하기 위해 둘 다 컴파일해야합니다. 어떻게 모든 버전을로드하도록 프로그램에 지시 할 수 있습니까? 감사 – JayPea

관련 문제