我有一个使用桌面命名空间扩展的程序。在 Windows 2000、Windows XP 和 Windows Vista 中,用户可以将图标拖到桌面上的图标上,然后启动程序。但是,在 Windows 7(家庭版和旗舰版)中,所发生的只是重新排列了图标顺序。我尝试使用 Sysinternals dbgview.exe。它正确地注意到了来自 handler.exe 的许多事件,但没有通过将图标拖到命名空间图标上来触发任何事件,这意味着甚至根本没有调用 drophandler。
由于它仍然可以正常工作,因此 Windows 7 一定有一些以前版本的操作系统没有要求的东西。
命名空间扩展是通过将相关键填充到注册表中来安装的,我想让安装程序以这种方式工作:
HKCR\CLSID\{{MY-NAMESPACE-GUID}:():"Caption"
HKCR\CLSID\{{MY-NAMESPACE-GUID}:(Drop):"""c:\programpath\program.exe"" /argument ""%s"""
HKCR\CLSID\{{MY-NAMESPACE-GUID}\InProcServer32:():"""c:\programpath\handler.exe"""
HKCR\CLSID\{{MY-NAMESPACE-GUID}\InProcServer32:ThreadingModel:"Apartment"
HKCR\CLSID\{{MY-NAMESPACE-GUID}\DefaultIcon:():"""c:\programpath\program.exe"",4"
HKCR\CLSID\{{MY-NAMESPACE-GUID}\Shell\Open\Command:():"""c:\programpath\program.exe"""
HKCR\CLSID\{{MY-NAMESPACE-GUID}\shellex\DropHandler:():{MY-GUID-HANDLER}
HKCR\CLSID\{{MY-NAMESPACE-GUID}\shellex\PropertySheetHandlers(): {MY-GUID-HANDLER}
HKCR\CLSID\{{MY-NAMESPACE-GUID}\ShellFolder():00 01 00 00
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\Namespace\{{MY-NAMESPACE-GUID}:():"Caption"