我正在 Windows 10 IOT 企业版上创建一个带有 shell 命名空间扩展的虚拟文件夹。我使用的代码来自微软提供的 windows 7 SDK samplesm。这是整个项目:https ://github.com/pauldotknopf/WindowsSDK7-Samples/tree/master/winui/shell/shellextensibility/explorerdataprovider
该项目在 Windows 7 和 Windows 10 上完美运行,但在 Windows 10 iot Enterprise 上运行“regsvr32 explorerdataprovider.dll”后,虚拟文件夹图标确实显示在“我的电脑”下,但双击该图标后,没有任何反应。
所以我对此进行了调试,发现该函数DllGetClassObject
从未被调用过。我的猜测是windows 10 iot enterprise registry for shell namespace extension和windows 10不同,所以我上网搜索尝试添加足够的registry key,目前我使用的registry是:
REGSTRUCT rgRegEntries[] =
{
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s", szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\InprocServer32", szFolderViewImplClassID, NULL, (LPBYTE)L"%s", REG_SZ,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\InprocServer32", szFolderViewImplClassID, L"ThreadingModel", (LPBYTE)L"Apartment", REG_SZ,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\DefaultIcon", szFolderViewImplClassID, NULL, (LPBYTE)L"shell32.dll,-42", REG_SZ,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\ShellFolder", szFolderViewImplClassID, L"Attributes", (LPBYTE)&dwData, REG_DWORD,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s", szContextMenuClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\InprocServer32", szContextMenuClassID, NULL, (LPBYTE)L"%s", REG_SZ,
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\InprocServer32", szContextMenuClassID, L"ThreadingModel", (LPBYTE)L"Apartment", REG_SZ,
HKEY_CLASSES_ROOT, L"CLSID\\%s", szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
HKEY_CLASSES_ROOT, L"CLSID\\%s\\InprocServer32", szFolderViewImplClassID, NULL, (LPBYTE)L"%s", REG_SZ,
HKEY_CLASSES_ROOT, L"CLSID\\%s\\InprocServer32", szFolderViewImplClassID, L"ThreadingModel", (LPBYTE)L"Apartment", REG_SZ,
HKEY_CLASSES_ROOT, L"CLSID\\%s\\DefaultIcon", szFolderViewImplClassID, NULL, (LPBYTE)L"%s,0", REG_SZ,
HKEY_CLASSES_ROOT, L"CLSID\\%s\\ShellFolder", szFolderViewImplClassID, L"Attributes", (LPBYTE)&dwData, REG_DWORD,
////----------------------------------------------------------------------------------------
HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\%s",szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\DelegateFolders\\%s",szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\%s",szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
//HKEY_LOCAL_MACHINE, L"\\%s",szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved",szFolderViewImplClassID, NULL, (LPBYTE)g_szExtTitle, REG_SZ,
////----------------------------------------------------------------------------------------
// For performance, only context menu verbs that register this are considered when the user double-clicks.
HKEY_CURRENT_USER, L"Software\\Classes\\CLSID\\%s\\ShellEx\\MayChangeDefaultMenu", szContextMenuClassID, NULL, (LPBYTE)L"", REG_SZ,
// register the context menu handler under the FolderViewSampleType type.
HKEY_CURRENT_USER, L"Software\\Classes\\FolderViewSampleType\\shellex\\ContextMenuHandlers\\%s", szContextMenuClassID, NULL, (LPBYTE)szContextMenuClassID, REG_SZ,
};
但它仍然不起作用。
virtul 文件夹的 shell 命名空间扩展是否缺少任何注册表项?