당신은 당신이 This article은 사용의 예를 제공 등, 클래스 ID를 사용하여 COM 볼 수 있도록 어셈블리 쓰기, 데스크톱 가젯에 .NET 코드에 대한 반사 기반의 조립 로더를 사용할 수 있습니다 강요 아닙니다. net을 사용하여 "어댑터"없이 수행하려는 작업을 수행하십시오.
말했다되고, 당신은 알고 있어야 액티브 X 기반 데스크톱 가젯에 여러 가지 문제가 있습니다 : 액티브 인스턴스가 가제트에 생성되면
- 이 어셈블리 dll은에 의해 "열려 잠겨"입니다 sidebar.exe와 가젯이 닫힌 후에도 파일을 삭제할 수 없습니다. 안타깝게도 가젯 제거 프로세스에서는이를 고려하지 않고 가젯을 제거하면 어셈블리를 삭제하지 못하면 sidebar.exe에서 파일 삭제가 발생하여 어셈블리 및 다른 남아있는 파일은 남겨 둡니다. 그 시점까지 삭제되었습니다. 또한 오류 메시지가 표시되지 않습니다. 예를 들어, 새 버전의 가젯을 덮어 쓰는 경우에도 마찬가지입니다. - sidebar.exe는 새 가젯 패키지를 설치하기 전에 폴더를 완전히 삭제하려고 시도하므로 대부분의 경우 설치가 실패합니다.
- 이러한 ActiveX 컨트롤의 등록은 매우 까다로울 수 있습니다. 당신이 제공 한 CodeProject 기사에서 주어진 레지스트리 스크립트는 예를 들어, 내 Windows 7 x64에서 작동하지 않습니다. 이 문제를 해결할 수있는 유일한 방법은 WMI를 사용하여 레지스트리에 쓰는 것입니다.
- 비슷한 방식으로 ActiveX 컨트롤을 등록 취소하는 것도 문제가됩니다. 사용자가 가제트를 제거하면 레지스트리 항목이 남습니다. 내가 생각하기에 많은 사람들에게 문제는 아니지만 갑자기 많은 미사용 레지스트리 항목을 발견하는 모든 가제트를 시도하는 가제트 애호가를 상상해보십시오. 이 문제를 해결하려면 객체를 인스턴스화 한 직후 레지스트리 항목을 제거하고 (사이드 바 프로세스에 의해 캐시되므로) 다음 번 다시 시작하여 다시 등록하십시오.
리플렉션을 사용하지 않고도이를 수행 할 수 있지만 리플렉션을 사용하면 어댑터 어셈블리를 대체 폴더에 복사하여 현재 어셈블리를로드 한 다음 가제트가 될 때 언로드 할 수 있으므로 더 나은 옵션이 될 수 있습니다. 그것을 사용하여 닫히거나 끝냈다. 이렇게하면 호스팅 어셈블리가 다른 폴더에 있고 어쨌든 가제트를 닫을 때 반영된 어셈블리가 언로드되기 때문에 가젯을 제거 할 수 없다는 첫 번째 문제가 해결됩니다.
facebook.dll이로드되지 않는 이유는 사용중인 로더가 종속성을 올바르게 해결하지 못하기 때문입니다 (어디서 볼지 모르기 때문에 파일을 찾을 수 없음). 반사 식 어셈블리 로더 인 PluginLoader를 사용해보고 작동하는지 확인해보십시오. 아직 공식 릴리스가 없지만 모든 개발자가 ActiveX 및 Windows Desktop Gadgets의 문제를 시도하고 제거하는 데 널리 사용하도록 권장했습니다. 우리가 공식적으로 발표하지 않았기 때문에 다음과 같은 코드를 사용하기 위해 플러그인 로더 준비를 설치합니다 우리의 가제트, Auction Sidebar Tool를 설치해야합니다 :
로드 할 클래스를로드하는 데 필요한 클래스가
var plLoader = new ActiveXObject("Sidebar.PluginLoader");
var myLibrary = plLoader.LoadAssembly(classToLoad,
System.Gadget.path+"\\path\\to\\MyLibrary.dll");
myLibrary.GetFaceBookFeeds();
Namespace.Class (즉, MyLibrary.MyClass) 형식입니다. 우리는 특정 종속성을 올바르게 해결하도록 코드를 작성하여 잘 작동합니다. 그것이 당신을 위해 작동한다면, 당신은 가제트와 함께 그것을 환영합니다. 필요한 것은 AuctionSidebarTool 폴더의 PluginLoader.js 및 PluginLoader.dll 파일뿐입니다. 그러나 PluginLoader.js 파일을 편집하여 어셈블리를 참조하는 부분을 제거해야합니다 (110 행 이상). 이것을 프로젝트에 포함하면 기존 PluginLoader.dll을 확인하고 실패하면 로컬 AppData의 Windows 사이드 바 폴더로 복사하여 등록하고 AddInLoader
객체에 LoadAssembly
및 UnloadAssembly
메서드를 제공합니다. 추가 도움이 필요하면 의견에 남겨주세요.
희망이 있습니다. 그것은 아마도 내가 지금까지 작성한 가장 긴 대답이다.
Shudder. 우리는 여전히 브라우저 activex를하고 있습니까? –
예, 가제트에서 bowser activex를 사용합니다 (가제트 내부에서 ie6 환경을 사용하고있는 것 같습니다) – rAm
@Marc Gravell : IE 엔진에서 호스팅하는 Windows 데스크톱 가젯입니다. 가제트가 다른 브라우저에서 실행되지 않기 때문에 여기에는 브라우저 간 호환성 문제가 없습니다. –