2009-11-01 15 views
61

Wystarczy popatrzeć na to Pseudokod:Uzyskiwanie bezwzględnej ścieżki do pliku wykonywalnego przy użyciu C#?

string exe_path = system.get_exe_path() 
print "This executable is located in " + exe_path 

Gdybym budować powyższy program i umieść plik wykonywalny w C:/meow/, byłoby wydrukować This executable is located in C:/meow/ każdym razem, gdy jest uruchamiany, niezależnie od aktualnego katalogu roboczego.

Jak mogę to łatwo osiągnąć za pomocą C#?

+0

Duplikat: http://stackoverflow.com/questions/218061/get-the-applications-path –

+0

http://stackoverflow.com/questions/1023306/finding-current-executables-path-without-procself -exe/1024937 # 1024937 –

Odpowiedz

90

MSDN has an article który mówi, że należy użyć System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; jeśli potrzebujesz katalogu, użyj System.IO.Path.GetDirectoryName dla tego wyniku.

Albo jest krótszy Application.ExecutablePath, który "Pobiera ścieżkę do pliku wykonywalnego, który uruchomił aplikację, w tym nazwę pliku wykonywalnego", co może oznaczać, że jest nieco mniej niezawodny w zależności od sposobu uruchomienia aplikacji.

+25

System.Reflection.Assembly.GetExecutingAssembly() dostanie tylko zestaw EXE, jeśli jest to miejsce, z którego pochodzi. GetEntryAssembly() otrzyma poprawny zestaw. – GraemeF

+4

Jest to szczególnie ważne, jeśli tworzysz usługę Windows, ponieważ usługa jest uruchamiana z C: \ Windows \ System32, więc będziesz mieć ten katalog roboczy. Zamiast tego użyję metody GraemeFa. – kevindaub

+48

Powyższa metoda zwraca bieżącą ścieżkę jako identyfikator URI (tj. "File: // c: \\ dane"). To, nad czym pracował, to: 'System.Path.GetDirectoryName (Assembly.GetExecutingAssembly(). Location));' – arikfr

35
AppDomain.CurrentDomain.BaseDirectory 
+7

To jest najlepsza, najprostsza odpowiedź. Ta metoda działa na linux/mono i Windows, niezależnie od bieżącego katalogu. – raider33

1

Załóżmy, że mam .config plik w aplikacji konsoli i teraz otrzymuję jak poniżej.

Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\YourFolderName\\log4net.config"; 
+2

Bieżący katalog nie może być katalogiem, w którym aplikacja jest uruchomiona. – Will

+3

Proszę użyć 'Path.Combine'. Istnieje wiele kodu, który nie działa poprawnie w Mono z ręcznie połączonych ścieżek takich jak ta. –

11
using System.Reflection; 

string myExeDir = new FileInfo(Assembly.GetEntryAssembly().Location).Directory.ToString(); 
3
var dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

I wskoczył na najwyższym oceniono odpowiedź i że ja nie dostaję tego się spodziewałem. Musiałem przeczytać komentarze, aby znaleźć to, czego szukałem.

Z tego powodu zamieszczam odpowiedź wymienioną w komentarzach, aby podać ekspozycję, na którą zasługuje.

1

po mojej stronie, kiedyś, przy zastosowaniu formularza:

String Directory = System.Windows.Forms.Application.StartupPath; 

trwa ścieżkę uruchamiania aplikacji.

Powiązane problemy