2014-01-10 77 views
6

我正在写一个需要能够从USB运行的C#应用​​程序,并启动安装到USB的其他程序。不一定是它正在运行的计算机。我做启动这些应用程序:我怎样才能找到我的EXE运行的驱动器?

Process.Start("notmyprogram.exe"); 

这个伟大工程,但我发现,如果notmyprogram.exe.安装到计算机硬盘驱动器这仅适用。如果我想运行没有安装在计算机上,而是到USB的程序,我必须直接调用它,就像这样:

Process.Start("D:\\Programs\\notmyprogram\\applicationinstalledonusb.exe"); 

D:是我的操作系统分配的盘符。但是,显然每个计算机的驱动器号更改,它不会总是D.我的应用程序位于USB,所以我的问题是:有什么方法可以找到我的EXE是从哪个驱动器号运行,所以我可以将目录追加到盘符的结尾?或者,也许我只是以错误的方式去解决问题,还有更高效的方法来完成这个任务?

+0

@AlexeiLevenkov我已经删除不需要的部分一直在寻找这最后一天,所以通常我是最后的手段,因为我发现如果我自己弄清楚,我学得更好。如果已经得到解答,我表示歉意,但我找不到它。 – Halter

+1

[如何在C#中的相对路径中获取文件]的可能重复(http://stackoverflow.com/questions/3259583/how-to-get-files-in-a-relative-path-in-c-sharp ) –

+0

我认为这应该是你在找什么:http://msdn.microsoft.com/en-us/library/system.appdomain.basedirectory(v=vs.110).aspx – mao47

回答

7

试试这个(使用System.IO):

string root = Path.GetPathRoot(System.Reflection.Assembly.GetEntryAssembly().Location); 

此外,您可以使用Path.GetFullPath()代替Path.GetPathRoot(),并从字符串没有硬编码的文件夹名称

+1

这工作!只需要将目录添加到根目录,谢谢! – Halter

+0

@nope无需重建完整路径。通过Path.GetDirectoryName(Path.GetFullPath(...))获取当前目录,然后使用[Path.Combine](http://msdn.microsoft.com/en-us/library/fyy7a5kt(v = vs。 110).aspx)从那里导航。 – nmclean