2014-01-10 15 views
6

私はusbから実行できる必要があるc#アプリケーションを作成しており、usbにインストールされている他のプログラムを起動します。必ずしもそれが実行されているコンピュータではありません。私は実行して、これらのアプリケーションを起動しています:これは素晴らしい作品exeファイルが実行されているドライブを見つけるにはどうしたらいいですか?

Process.Start("notmyprogram.exe"); 

しかし、私はnotmyprogram.exe.は、コンピュータのハードドライブにインストールされている場合にのみ動作することを発見しています。私はではなく、USBに、コンピュータにインストールされていないプログラムを実行したい場合は、私はそうのように、それを直接呼び出す必要があり:

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

が私のOSによって割り当てられた文字です。しかし、明らかにドライブ文字はコンピュータごとに変わりますが、それはいつも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.GetPathRoot()Path.GetFullPath()を使用して

+1

これはうまくいった!おかげで今、ルートにディレクトリを追加する必要があります! – Halter

+0

@nope完全パスを再構築する必要はありません。現在のディレクトリを 'Path.GetDirectoryName(Path.GetFullPath(...)) 'で取得し、[Path.Combine](http://msdn.microsoft.com/en-us/library/fyy7a5kt(v = vs。 110).aspx)を参照してください。 – nmclean

関連する問題