0

我编写了一个资源管理器扩展来在预览窗格中显示我的自定义文件格式。这在 Windows 7 中运行良好,但在 Vista 中似乎不起作用。同一个 DLL 处理缩略图和预览窗格。缩略图方面的东西在 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 没有被调用,我认为问题一定与我在注册表中设置的内容有关?我知道 DLL 导出没问题,因为它适用于 Vista 和 Win7 中的缩略图,并且适用于 Windows7 中的预览窗格。

DLL 是 x64,我的 Vista 和 Win7 操作系统也是如此。DLL 是用 C++ 编写的,没有 ATL。

谢谢你的帮助,丹。

4

1 回答 1

1

reg 看起来没问题,只有默认的 progid 丢失了。Win7 确实记录了 PreviewHandlers 键位置的替代行为。不幸的是,SDK 文档没有说明 Vista 需要什么。Vista 时代杂志的一篇文章使用 HKLM 而不是 HKCU。我打赌就是这样。

于 2010-05-11T14:02:35.410 回答