The argument list passed to the Main method does not include the executable path. The argument list returned by GetCommandLine Args does. I've tested that on 2003 and 2005 to confirm. I can't see how any previous applications of your would behave any differently. I guess the ".NET way" would be to use GetCommandLineArgs and that is what I'd do, but most coming from a C/C++/Java background would probably be inclined to use the Main arguments. I can't think of many situations where you would need to know the executable path as a commandline argument so from that point of view GetCommandLineArgs is probably a little less efficient.