One quick comment about your code. Your try/catch block encompasses your argument null exceptions. Won't they be caught by your catch block which I assume you don't want? Or since you are throwing them they won't be caught? I have never tried that before to see what would happen.
Ordinarily, yes but in this case
Linker.Crash(Exception e, string message) handles all the problems in those apps. In the command line app it just rants to the log and crashes, in the GUI app it shows a message box, rants to the log and crashes. Actually, now that I think of it, the GUI just crashes too. Uh. Fixing that.
P.S. If you use resharper then look in to Exceptional as an Addin. It can force you to either document all exceptions or make sure that you catch them.
I do use that, and yes, it's a good 'un. For those who have never seen it ...