Взгляните на реестр HKEY_CLASSES_ROOT, там есть ключи для расширений файлов, например, '.txt', значение которых (по умолчанию) содержит имя другого ключа (для '.txt' это 'txtfile')
Ключ 'txtfile' содержит ключи для значка по умолчанию и команд оболочки.
Я подозреваю, что вы можете создавать ключи и значения, аналогичные тем, которые уже существуют для вашего приложения.
Что касается обработки аргументов командной строки, которые должны совпадать с рабочим столом, просто измените основную функцию на параметр string [] и обработайте их по мере необходимости
[MTAThread]
static void Main(string[] args)
{
Application.Run(new Form1());
}