i haven't looked at much VB, but MSDN has tons of walkthroughs, tips, and other info.
i'm not sure how to execute a file / open a a file via shell extensions, but as for the drive problem:
the page linked below shows use of the CurDir() function, .. you could probably parse the output of that function early to get the drive letter your working with -- given that the program runs with it's working directory as the same path that it exists in. (also, .. no risk of this being used from a drive/partition mounted as an NTFS subfolder is there?)
if you store that into a variable early, you can use it for dynamically fixing to correct paths for the rest of execution. (all of my logic is actually running from use of C but the general idea should work w/ about anything)
i'd test the ideas here ... but umm .. i'm in linux and don't wanna fight with windows today