معاينة مخصصة - يعمل في Windows7 ، وليس في Vista
-
25-09-2019 - |
سؤال
لقد كتبت ملحق Explorer لعرض تنسيق الملف المخصص الخاص بي في جزء المعاينة. هذا يعمل بشكل جيد في Windows 7 ، ولكن لا يبدو أنه يعمل في Vista. نفس DLL يتعامل مع كل من Thumbnails وجزء المعاينة. يعمل الجانب المصغرة من الأشياء في كل من Vista و Windows7.
إضافة سجلات إلى الكود الخاص بي ، فإن Vistas فقط استدعاء وظيفة dllgetClassObject الخاصة بي لفئة Thumbnail ، وليس فئة معالج المعاينة.
هل هناك أي شيء واضح أن Vista يفعل بشكل مختلف لنظام التشغيل Windows7 عند استدعاء com dlls؟
إليك القيم التي أضيفها إلى السجل:
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 لا يتم استدعاؤه ، أفترض أن المشكلة يجب أن تكون شيئًا ما يتعلق بما أقوم به في السجل؟ أعلم أن صادرات DLL على ما يرام ، حيث إنها تعمل مع الصور المصغرة في كل من Vista و Win7 ، وتعمل في جزء المعاينة في Windows7.
DLL هو X64 ، وكذلك كل من بلدي Vista و Win7 OSS. تتم كتابة DLL في C ++ بدون ATL.
شكرا لك على أي مساعدة في هذا ، دان.
المحلول
يبدو Reg على ما يرام ، فقط الافتراضي المفقود. لدى Win7 سلوك بديل لموقع مفتاح المعاينة. لسوء الحظ ، لا تقول مستندات SDK ما يتطلبه Vista. وقت فيستا مقال بمجلة يستخدم HKLM بدلا من HKCU. أراهن أن هذا كل شيء.