2010-05-11 3 views
0

미리보기 창에 사용자 지정 파일 형식을 표시하기 위해 탐색기 확장을 작성했습니다. 이것은 Windows 7에서 정상적으로 작동하지만 Vista에서는 작동하지 않습니다. 동일한 DLL이 미리보기 이미지와 미리보기 창을 모두 처리합니다. 사물의 축소판 측면은 Vista와 Windows7에서 모두 작동합니다.사용자 지정 미리보기 패널 - Vista가 아닌 Windows7에서 작동합니다.

내 코드에 로그를 추가하면 Vistas는 미리보기 처리기 클래스가 아닌 미리보기 클래스에 대한 내 DllGetClassObject 함수 만 호출합니다.

COM DLL을 호출 할 때 Vista가 Windows7과 다르게 작동한다는 것이 명백합니까?

여기가 레지스트리에 추가 해요 값이다 :

HKEY_CLASSES_ROOT\\.<myext>\\(default) = "<myext>.Thumbnail.Handler.1" 
HKEY_CLASSES_ROOT\\<myext>.Thumbnail.Handler.1\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}\\(default) = "<myguid>" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\(default) = "<myext> Preview Handler" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\DisplayName = "@ExplorerPreviewHandler.dll,-101" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\Icon = "@ExplorerPreviewHandler.dll,201" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\AppID = "{6d2b5079-2f0b-48dd-ab7f-97cec514d30b}" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\(default) = "<path to my dll>" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ThreadingModel = "Apartment" 
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ProgID = "<myext>.Thumbnail.Handler.1" 
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers\\<myguid> = "<myext> Preview Handler"}, 

내 DllGetClassObject 호출하고 있지 않은지, 내가 문제가 내가 레지스트리에 설정하고있어 함께 할 수있는 뭔가가 있어야합니다 가정을 감안할 때 ? Vista 내보내기와 Win7 축소판 모두에서 작동하며 Windows7의 미리보기 창에서 작동하므로 DLL 내보내기가 괜찮음을 알고 있습니다.

DLL은 x64이며 Vista와 Win7 OS도 마찬가지입니다. DLL은 ATL없이 C++로 작성됩니다.

이 도움에 감사드립니다. Dan.

답변

1

reg가 정상적으로 보입니다. 기본 progid 만 누락되었습니다. Win7은 PreviewHandlers 키의 위치에 대한 대체 동작을 문서화했습니다. 불행하게도 SDK 문서는 Vista가 요구하는 것을 말하지 않습니다. Vista 시간 magazine article은 HKCU 대신 HKLM을 사용합니다. 나는 그것이라고 생각한다.

+0

환상적! 그것은 HKCU -> HKLM이었습니다. 너무 단순한 걸 믿을 수 없어! 고맙습니다! – Dan