我有一个使用桌面命名空间扩展的程序。在Windows 2000,Windows XP和Windows Vista中,用户可以将图标拖到桌面上的图标上,然后启动程序。但是,在Windows 7(Home和Ultimate)中,所有发生的事情都是重新排列图标顺序。我尝试使用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"
答案 0 :(得分:3)
ShellFolder需要在Windows 7上设置SFGAO_BROWSABLE位(0x08000000)。
答案 1 :(得分:0)
Windows 7的UAC可能会阻止所需的拖放行为。如果拖动的项目具有比目标项目更少的权限,则目标将不会启动。也许你可以关闭UAC?