В .NET вы, вероятно, могли бы создать расширение оболочки, которое вы бы регистрировали для программ EXE, которое действительно было бы просто фильтром для расширения EXE. Когда вызывается расширение вашей оболочки, вы запускаете программу (вызывая старую функциональность) после регистрации вашей информации.
Обратите внимание, что вы можете сделать это ТОЛЬКО с .NET 4.0 или выше, который в настоящее время находится в бета-версии. Из-за способа, которым работали предыдущие версии CLR, в процессе одновременно разрешалось запускать только одну версию (включая проводник, процесс ОС).
.NET 4.0 представляет экземпляры CLR Side-by-Side (SxS) в одном и том же процессе, поэтому его можно использовать из .NET 4.0 в качестве механизма для расширений оболочки.
Это также потребует много COM-взаимодействия, но это может быть сделано.
Что касается комментария LWoodyiii, спрашивающего, можно ли это сделать в более старых версиях .NET: Может ли это быть? Да, это можно сделать, но официальный указ от MS таков, что вы не должны этого делать. Причина этого в том, что если кто-то решит запустить расширение оболочки или каким-либо образом взаимодействовать с ОС, используя .NET, а версия будет отличаться от используемой, вы рискуете потерять процесс ОС. .