Pergunta

Escrevi uma extensão do Explorer para exibir meu formato de arquivo personalizado no painel de visualização. Isso funciona bem no Windows 7, mas não parece funcionar no Vista. A mesma DLL lida com as miniaturas e o painel de visualização. O lado das miniaturas funcionam no Vista e no Windows7.

Adicionando logs ao meu código, as Vistas chamam apenas minha função DllGetClassObject para a classe Miniatural, não a classe Handler de visualização.

Existe algo óbvio que o Vista faz de maneira diferente para o Windows7 ao chamar de DLLs?

Aqui estão os valores que estou adicionando ao registro:

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"},

Dado que meu dllgetclassObject não está sendo chamado, presumo que o problema deve ter algo a ver com o que estou definindo no registro? Sei que as exportações de DLL estão bem, pois funciona para as miniaturas no Vista e no Win7, e funciona para o painel de visualização no Windows7.

DLL é x64, assim como o meu Vista e Win7 OSS. A DLL é escrita em C ++ sem ATL.

Obrigado por qualquer ajuda com isso, Dan.

Foi útil?

Solução

O Reg parece bem, apenas o Progid padrão está faltando. O Win7 documentou o comportamento alternativo para a localização da tecla PreviewHandlers. Infelizmente, os documentos do SDK não dizem o que o Vista exige. Um horário de vista artigo de revista Usa o HKLM em vez de HKCU. Aposto que é isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top