2014-01-10 10 views
6

Ich schreibe eine C# -App, die von einem USB ausgeführt werden muss, und es startet andere Programme, die auf dem USB installiert sind. Nicht unbedingt der Computer, auf dem es läuft. Ich bin startet diese Anwendungen, indem Sie:Wie finde ich heraus, von welchem ​​Laufwerk meine Exe läuft?

Process.Start("notmyprogram.exe"); 

dieses große Werk aber ich finde, dass dies nur funktioniert, wenn notmyprogram.exe. auf die Computer-Festplatte installiert ist. Wenn ich ein Programm ausführen möge nicht auf dem Computer installiert, sondern auf die usb, ich habe es nennen direkt, etwa so:

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

Wo D: der Brief von meinem O zugeordnet ist. Natürlich ändert sich der Laufwerksbuchstabe pro Computer, es wird nicht immer D sein. Meine Anwendung befindet sich auf dem USB, also meine Frage ist: Gibt es eine Möglichkeit zu finden, welcher Laufwerksbuchstabe meine exe ist, von der ich dann das Verzeichnis anhängen könnte das Ende des Laufwerksbuchstaben? Oder vielleicht gehe ich einfach falsch herum und es gibt einen effizienteren Weg, dies zu erreichen?

+0

@AlexeiLevenkov Ich habe Ich suche dies nach dem letzten Tag, SO ist normalerweise meine letzte Zuflucht, da ich finde, dass ich besser lerne, wenn ich es selbst herausfinde. Wenn dies bereits beantwortet wurde, entschuldige ich mich, aber ich konnte es nicht finden. – Halter

+1

mögliche Duplikate von [Wie bekomme ich Dateien in einem relativen Pfad in C#] (http://stackoverflow.com/questions/3259583/how-to-get-files-in-a-relative-path-in-c-sharp) –

+0

Ich denke, das sollte sein, was Sie suchen: http://msdn.microsoft.com/en-us/library/system.appdomain.basedirectory(v=vs.110).aspx – mao47

Antwort

7

Versuchen Sie dies (mit System.IO):

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

Außerdem können Sie Path.GetFullPath() statt Path.GetPathRoot() verwenden und unerwünschten Teil aus der Zeichenfolge entfernen, ohne hartzucodieren den Ordnernamen

+1

Das hat funktioniert! Ich muss das Verzeichnis jetzt nur zur Wurzel hinzufügen, danke! – Halter

+0

@nope Keine Notwendigkeit, den vollständigen Pfad neu zu erstellen. Rufen Sie das aktuelle Verzeichnis über 'Path.GetDirectoryName (Path.GetFullPath (...))' 'auf und verwenden Sie dann [Path.Combine] (http://msdn.microsoft.com/en-us/library/fyy7a5kt (v = vs. 110) .aspx), um von dort zu navigieren. – nmclean

Verwandte Themen