ShellBoost

Overview

ShellBoost is a software component that allows .NET developers to easily write Windows Shell Namespace Extensions and Shell-integrated Cloud Drives. Writing this kind of component is a difficult and expensive task. ShellBoost makes that much easier and cheaper.

What is a Shell Namespace Extension?

Windows Explorer is a crucial component of any Windows installation, that every end-user is fully familiar with. It’s the out-of-the-box host program, over the Windows Shell, that provides a graphical and hierarchical representation of many Windows objects such as the desktop, the user’s documents, physical folders and files, or their content (like .zip files). These items are organized into namespaces hierarchies. The Shell’s namespace graphical representation also includes other visual information such as:

details views, list views, icon views

thumbnails and tooltips

property pages

toolbars and ribbons

notification banners

Depending on the Windows version, the Shell also comes with many standard end-user tools and actions, that can act on items and folders in a hierarchy, such as

context menus, with standard or specific items, added by other shell extensions

copy, paste, cut, delete, link, drag and drop

go to, backward, forward, level up, level down

grouping and filtering

searching

cloud files sync information

A Shell Namespace Extension is a virtual folder in the shell namespace, among other shell folders. When a user browses into such a virtual folder, the data is presented as a tree-structured hierarchy of folders and files, much like the rest of the Shell namespace:

What is a Shell Namespace Extension? - Picture 1

Users and applications can interact with the contents of this virtual folder in much the same way as with any other namespace object.

In fact, even a standard Windows installation contains lots of out-of-the-box namespace extensions:

Zip folders

Ftp folders

Library folders

Search folders

“God Mode” folder and other well-known folders: Windows 7 GodMode and Other Folder Shortcuts

Shell Namespace Extensions are also referred sometimes as Shell Data Source Objects, as an extension provides items and sub folders (folders are just a certain type of items) and their columns or properties for a given junction point in the shell namespace. A folder can somewhat be seen like a table, each item being a row, each property being a column, and each property value being a cell.

Files On-Demand

Windows 10 version 1709 (or “Fall Creators Update”) also introduces the “Files On-Demand” feature. It allows users to see all their files stored on OneDrive from within the Windows Explorer, without having to first download these files. ShellBoost has exclusive support for this on-demand technology, with or without a Shell Namespace Extension support, through the MultiPointSynchronizer class.

If you want to build a Windows Shell integrated Cloud Drive and hesitate between the different available technologies, check out the Developing your own Cloud Drive page for a comparison.

Why would I ever want to write a custom Shell Namespace Extension?

Beyond the fact it’s just so cool because it tightly integrates with billions of copies of Windows running out there, here are some reasons to implement such a thing:

With a namespace extension, you can expose any data or info set to end-users, while implicitly providing them with a load of features provided by the Windows Shell (navigation, search, copy, paste, links, etc.).

Since most Windows users in the world know the Windows Shell / Explorer well, this will considerably reduce the need for costly end-user change management and/or training for your project adoption.

Depending on how your data is organized, you may even end up not having to write anything else that a shell extension. Since folders and items can be fully virtual, you can use them to represent anything you want.

Even an item content can be created on demand. So, for example, you can show an end-user a list of Excel or PDF files that don’t really exist, but that you will create on the fly when the user will double-click on them from the Explorer. These files content could be created on-the-fly from a CRM system for example.

Things you can’t do without a Shell Namespace Extension

Without a Shell Namespace Extension, you cannot do these:

Have multiple items with the same name in a given shell folder. It’s impossible to have two or more file system entry with the same name.

Open a composite file (like an archive file) like it is a virtual folder. That’s what Explorer does when an end-user clicks on a .zip file. It shows the content of the .zip file as a sub tree hierarchy naturally integrated visually in the Shell.

Have items in a shell folder with names containing reserved characters such as ‘?’ or ‘:’.

Have fully virtual items, items without a physical presence on the disk as files or folders, like database items, or files on a remote server, or in the cloud.

Have these items support shortcuts, drag & drop, copy / paste, modification, etc. just like they were regular files and folders.

Present a data source (whatever the data is) as folders and files to an end-user.

Present fully virtual files (without any physical presence), created on-demand, to an end-user.

Deeply customize Shell Views UI over your custom folders.

Things you can do without a Shell Namespace Extension

There are many ways to extend the Windows Shell, and depending on your needs, you can extend it without writing a Shell Namespace Extension.

Customizing various menus displayed by Explorer. ShellBoost does support customizing shortcut menus, but only for Shell Namespace Extensions written using it.

Customizing icons and thumbnails for items in the namespace. ShellBoost does support customizing icons and thumbnails, but only for Shell Namespace Extensions written using it.

Handling a completely custom file format, if it does not need to be displayed as a hierarchy, for example for previewing files, or determining their available properties. ShellBoost does support customizing the properties of a Shell item, but only for Shell Items in a Shell Namespace Extension written using it.

Customizing explorer toolbar, bands.

Customizing the explorer ribbon.

Etc.

Note although many of these actions can be implemented independently of the item’s position in the namespace tree, writing a namespace extension is still useful if you want to fine tune the related actions. For example, a namespace extension can mask the ‘Delete’ command for a given item or change what really happens when ‘Delete’ is clicked.

A namespace extension is not to be confused with favorites or quick access icons, which are just links or references to already existing namespaces folders. Using standard Windows menus, an end-user can already create Quick Access links, shortcuts, or pin items or folders (virtual or not) to the taskbar or the start menu (for version of Windows above 8). In the following image, the “Pictures” folder is just a reference to an existing physical folder:

Favorites and Quick Access links - Picture 2

Shell Instance Objects

Some virtual folders that are be installed by 3rd parties, such as One Drive® or Dropbox® folders are namespace extensions, but without any custom code. It’s possible because Windows provides a way to declare a namespace extension based a physical directory on the disk. In this case, the shell provides the code, and it just needs several registry entries to be setup properly. This is explained in these Microsoft articles: Integrate a Cloud Storage Provider and Creating Shell Extensions with Shell Instance Objects. The result quite acts like a favorite, or a shortcut to the folder, and doesn’t allow more end-user action than what’s provided by the Shell.