Ok, the answer, as suggested in comments, was to create my own ShellExtension dll. I took a look at the microsoft provided example, but it wouldn't compile, and an example on CodeProject didn't make much sense (I think it was written for a different version of VS).
After some googling, however, I discovered this C# codeproject tutorial, which introduced me to SharpShell, which is a C# library for shell extensions. This simplified matters a whole lot:
[ComVisible(true)]
[COMServerAssociation(AssociationType.ClassOfExtension, ".myjob")]
public class MyAppDropHandler : SharpDropHandler
{
protected override void DragEnter(DragEventArgs dragEventArgs)
{
dragEventArgs.Effect = DragDropEffects.Move;
}
protected override void Drop(DragEventArgs dragEventArgs)
{
new Process
{
StartInfo =
{
FileName = this.SelectedItemPath,
Verb = "Run",
Arguments = String.Join(" ", list.Select(s => String.Format("\"{0}\"", s)))
}
}.Start();
}
}
I then followed the instructions for registering the extension here, and it appears to work great.