集成云存储提供程序

拥有云存储提供商时,应执行几个步骤,以便为用户提供一致的首选体验。 这两项内容注册为同步根提供程序,并将应用程序集成到导航窗格的根级别。

重要

仅在 Windows 10 中支持集成云存储提供程序。

 

第一件事是注册为同步根提供程序。 这让 Windows Shell 知道你的应用程序,并且你的应用程序将负责同步同步根目录下的文件。 这还会让其他应用程序知道你正在同步这些文件,以便它们能够做出适当的响应。 然后,其他应用程序可以使用 StorageFile.Provider 来获取应用程序的 DisplayNameID

若要注册为同步根提供程序,需要创建多个注册表项。 在提供键值对列表之前,下面是一些占位符,应将其替换为自己的应用程序数据。

  • [存储提供程序 ID]:云存储提供程序的名称。 无论应用程序的版本如何,此名称都应保持一致。 例如 OneDrive。
  • [Windows SID]:标识用户的唯一 Windows SID。 如果应用支持在一台计算机上为多个用户安装多个安装,则需要此部分。
  • [帐户 ID]:此用户的当前帐户的服务提供商标识符。 某些提供程序要求为用户提供多个同步根。 其中一个示例是工作和个人帐户。 帐户 ID 使你能够为一个用户注册多个帐户。 如果提供程序确实支持每个用户的多个同步根,则需要此部分。

这些占位符组合在一起,形成同步根 ID。必须放置 !在形成同步根 ID 时, 每个占位符之间的字符。下面是需要创建的键值对。

  • HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\[存储提供程序 ID][Windows SID][帐户 ID]\DisplayNameResource:指向 Windows Shell 或其他应用程序可以获取同步根的用户友好名称的资源。
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\[存储提供程序 ID][Windows SID][帐户 ID]\IconResource:指向 Windows Shell 或其他应用程序可以获取同步根图标的资源。
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\SyncRootManager\[存储提供程序 ID][Windows SID][帐户 ID]\UserSyncRoots\[Windows SID]:同步根所在的磁盘上的位置。

除了注册为同步根提供程序之外,你还希望用户能够轻松访问你提供的数据。 文件资源管理器命名空间旨在提供方便访问的方法。 为提供程序创建命名空间扩展并将其合并到文件资源管理器窗口中将允许用户与服务根级别进行交互,就像用于其他文件资源管理器项一样。 本主题介绍如何扩展文件资源管理器命名空间,以便提供程序将显示在导航窗格中的根级别。

“文件资源管理器”窗口的导航窗格是左侧显示的窗口部分。 在下图中,可以看到此用户的命名空间结构。 导航窗格中的根级别包括 OneDrive此电脑网络的对象。 按照以下步骤将扩展添加到同一级别。

导航窗格

若要将扩展添加到导航窗格,在编辑注册表之前,需要具备以下内容:

  • 包含要向用户显示的数据的文件系统文件夹。

  • 将在导航窗格中显示的云服务的名称。 如果服务支持多个帐户,也可能是实例的名称。

  • 应用程序的可识别图标。

  • 应用程序的 CLSID。 为应用程序生成 CLSID 的一种方法是使用 Uuidgen.exe。 有关 CLSID 的详细信息,请参阅 CLSID 密钥

以下步骤修改注册表,以便获取文件资源管理器命名空间中所需的信息。 具体步骤执行三项作。

  • 在 CLSID 的注册表中创建键,其中包括扩展的名称和图标的值以及定义其行为的其他信息。

  • 将扩展配置为集成到正确位置的导航窗格中,并具有适当的可见性。

  • 将扩展配置为在导航窗格中具有元素的预期行为。

这些说明专门使用 reg.exe 命令,但你可以使用所选的任何注册表编辑工具。 甚至可以将这些步骤集成到以编程方式更新注册表的安装程序中。

指示

步骤 1:添加 CLSID 并命名扩展

将扩展的名称添加到HKEY_CURRENT_USER下的注册表。 你还将为此扩展添加唯一标识符。 可以为每个用户添加多个扩展,但在这种情况下,需要每个扩展的唯一名称和标识符。 在这些步骤的其余部分,此名称和标识符必须一致。 在此示例中,名称 MyCloudStorageApp

重要

这些步骤中提供的标识符(0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3)只是用作示例。 需要将此更改为唯一 CLSID。

 

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3} /ve /t REG_SZ /d “MyCloudStorageApp” /f

步骤 2:设置图标的图像

提供应在导航窗格中显示的图标的路径。 在下面的示例中,1043 引用所指示 DLL 中图标的资源标识符。

重要

需要更新映像路径。 它应指向应用安装映像的通用路径。

 

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\DefaultIcon /ve /t REG_EXPAND_SZ /d %%SystemRoot%%\system32\imageres.dll,-1043 /f

步骤 3:将扩展添加到导航窗格并使其可见

将此值设置为0x1表示应固定扩展。 这将确保默认情况下向用户显示它。 用户的默认配置是,只有固定的项目才会显示在导航窗格中。 用户可以通过在导航窗格中右键单击并选择 显示所有文件夹来更改该设置。 如果不想固定扩展,可以将此值设置为0x0。 这不会删除你的扩展,而只是阻止它默认向用户显示。

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3} /v System.IsPinnedToNameSpaceTree /t REG_DWORD /d 0x1 /f

步骤 4:在导航窗格中设置扩展的位置

这对于确保导航窗格为用户提供一致的体验至关重要。

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3} /v SortOrderIndex /t REG_DWORD /d 0x42 /f

步骤 5:提供托管扩展的 dll。

使用 shell32.dll 模拟默认窗口文件夹。 仅当有特定原因执行此作并且熟悉命名空间扩展时,才更改此值。

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\InProcServer32 /ve /t REG_EXPAND_SZ /d %%systemroot%%\system32\shell32.dll /f

步骤 6:定义实例对象

指示命名空间扩展应像文件资源管理器中的其他文件夹结构一样工作。 有关 shell 实例对象的详细信息,请参阅 使用 Shell 实例对象创建 Shell 扩展

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\Instance /v CLSID /t REG_SZ /d {0E5AAE11-A475-4c5b-AB00-C66DE400274E} /f

步骤 7:提供目标文件夹的文件系统属性

这需要确保文件资源管理器为用户提供一致的预期体验。 此命令设置 FILE_ATTRIBUTE_DIRECTORYFILE_ATTRIBUTE_READONLY,这两者都是 文件属性常量

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\Instance\InitPropertyBag /v Attributes /t REG_DWORD /d 0x11 /f

步骤 8:设置同步根路径

设置同步根路径。

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\Instance\InitPropertyBag /v TargetFolderPath /t REG_EXPAND_SZ /d %%USERPROFILE%%\MyCloudStorageApp /f

步骤 9:设置适当的 shell 标志

设置将命名空间扩展固定到文件资源管理器树所需的一些标志。

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\ShellFolder /v FolderValueFlags /t REG_DWORD /d 0x28 /f

步骤 10:设置适当的标志以控制 shell 行为

设置相应的 SFGAO 标志。 相关标志包括SFGAO_CANCOPY、SFGAO_CANLINK、SFGAO_STORAGE、SFGAO_HASPROPSHEET、SFGAO_STORAGEANCESTOR、SFGAO_FILESYSANCESTOR、SFGAO_FOLDER、SFGAO_FILESYSTEM和SFGAO_HASSUBFOLDER。

reg add HKCU\Software\Classes\CLSID\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3}\ShellFolder /v Attributes /t REG_DWORD /d 0xF080004D /f

步骤 11:在命名空间根目录中注册扩展

将命名空间扩展配置为桌面文件夹的子级。

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3} /ve /t REG_SZ /d MyCloudStorageApp /f

步骤 12:从桌面隐藏扩展

重要的是,扩展仅显示在文件资源管理器的导航窗格中。 命名空间扩展不像普通快捷方式一样工作。 因此,不应使用此方法创建桌面快捷方式。

reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel /v {0672A6D1-A6E0-40FE-AB16-F25BADC6D9E3} /t REG_DWORD /d 0x1 /f