ActiveX 객체는 ocx나 dll 파일에 담겨 있는데요. 이 ActiveX 객체를 등록(regsvr32.exe를 통해 직접 등록되거나 설치 파일 등을 통해 등록)될 경우 객체 ID를 통해 해당 ActiveX 파일의 전체 경로를 파악해야 할 필요가 있습니다. 이때 사용하는 함수입니다.
private static string GetFilePathOfActiveX(string comName) { RegistryKey comKey = Registry.ClassesRoot.OpenSubKey(comName + "\\CLSID"); if (comKey == null) return null; string clsid = (string)comKey.GetValue(""); RegistryKey subKey = Registry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\LocalServer32"); if (subKey == null) { subKey = Registry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\InprocServer32"); } if (subKey == null) { subKey = Registry.ClassesRoot.OpenSubKey("WOW6432Node\\CLSID\\" + clsid + "\\InprocServer32"); } if (subKey == null) return null; return (string)subKey.GetValue(""); }
위의 방식은 현재 Windows 10 64Bits 환경에서 작동하는 것을 확인했습니다. 다른 환경에서도 정상적으로 작동하는지 확인이 필요한데요. 혹 Win10 64Bits 환경 이외에서도 어떻게 작동하는지 댓글을 통해 언급해 주시면 좋겠습니다.
위의 함수는 아래처럼 사용할 수 있습니다.
MessageBox.Show(GetFilePathOfActiveX("XrMap.XrMapControl"));