Между прочим, не поддерживается использование .NET для расширений оболочки из-за текущей неспособности разместить несколько версий времени выполнения в одном и том же процессе (.NET 4 снимает это ограничение).
Рассмотрим случай, когда у вас есть два расширения оболочки; один для .NET 3.5, один для .NET 1. Какая среда выполнения будет загружена в ваш процесс? Ну, это более или менее случайно - это зависит от того, какое расширение оболочки загружается первым. Иногда это может быть среда выполнения 2.0, иногда это среда 1.1.
Это также проблема, если программа .NET создает общие файловые диалоги; Ваше расширение оболочки может загружаться или не загружаться, а может и не работать с верной версией времени выполнения.
Таким образом, если вы идете по маршруту расширения Shell , вы должны использовать собственный C ++ / COM / Win32.