c# Activator.CreateInstance 사용 시 새로운 인스턴스로 특정 프로그래을 실행 시키는 방법

안녕하세요 답답해서 질문 남깁니다…

현재 Winforms에서 ComInterface를 사용하여 특정 프로그램을 제어하는 프로그램을 개발 중 입니다.
아래 코드와 같이 Activator.CreateInstance를 사용하여 특정 프로그램을 실행 시키는거 까지는 성공하였습니다.

   Type excel_type = Type.GetTypeFromProgID("xxxxxxxx");
            dynamic excelApp = Activator.CreateInstance(excel_type);

여기서 문제가 발생 하였는데 위와 같은 코드를 사용하게 되면
연결은 가능한데 기존에 특정 프로그램이 실행중이면
실행중인 프로그램과 연결되는 문제가 발생하고 있습니다.
그렇게 되면 기존에 작업중인 내용이 꼬이게 되어 오류가 발생하고 있고요.

혹시 다른 방법으로 ComInterface를 제어 하거나
Activator.CreateInstance 사용해서 새로운 프로세스로만 실행 하도록 하는 방법을 알고 계신분이 있으시다면
조언을 구합니다.

감사합니다.

도움 드릴만한 지식이 없기에 끌어올릴겸… GPT 남겨놓습니다.

GPT4.0


COM 인터페이스를 사용하는 WinForms 애플리케이션에서 Activator.CreateInstance를 사용하여 특정 프로그램의 새 인스턴스를 생성할 때 발생하는 문제를 해결하려면 몇 가지 방법을 시도해볼 수 있습니다. 이미 실행 중인 인스턴스와 연결되는 대신 새 인스턴스를 만들려면 다음 방법들을 고려해볼 수 있습니다:

  1. 새 프로세스를 명시적으로 시작하기:
  • System.Diagnostics.Process 클래스를 사용하여 새로운 프로세스를 시작할 수 있습니다. 이 방법은 COM 개체가 아니라 실행 파일을 직접 시작하는 것입니다. 예를 들면, Excel의 경우 Process.Start("excel.exe")를 사용할 수 있습니다.
  1. COM 개체의 새 인스턴스 만들기:
  • 일부 COM 개체는 새 인스턴스를 명시적으로 만들 수 있는 방법을 제공할 수 있습니다. 예를 들어, Excel의 경우 new Microsoft.Office.Interop.Excel.Application()을 사용할 수 있습니다.
  1. Rot (Running Object Table) 사용:
  • 실행 중인 객체 테이블(Rot)을 확인하여 이미 실행 중인 인스턴스가 있는지 확인한 후, 없는 경우에만 새 인스턴스를 만들 수 있습니다. 이 방법은 좀 더 복잡하며, Rot를 쿼리하는 방법에 대한 지식이 필요합니다.
  1. COM Moniker 사용:
  • 특정 COM 객체들은 "monikers"를 지원하며, 이를 통해 새 인스턴스를 생성할 수 있습니다. 이는 고급 기술이며, 특정 COM 개체가 이를 지원하는지 확인해야 합니다.
  1. Registery 설정 변경:
  • 일부 프로그램은 레지스트리 설정을 변경하여 새 인스턴스의 동작을 제어할 수 있습니다. 예를 들어, Microsoft Office 애플리케이션의 경우 레지스트리 설정을 조정하여 항상 새 인스턴스를 시작하도록 할 수 있습니다. 이 방법은 시스템 전반에 영향을 미칠 수 있으므로 주의가 필요합니다.

위 방법들 중 어느 것이 적합한지는 사용하려는 특정 COM 개체의 특성과 요구 사항에 따라 달라질 수 있습니다. 가능한 경우 해당 COM 개체의 문서를 참조하거나, 개체에 대한 추가 정보를 제공하는 커뮤니티 또는 포럼을 참조하는 것이 좋습니다.

2 Likes