Uzyskanie ścieżki bezwzględnej pliku wykonywalnego przy użyciu C#?

Spójrz na ten pseudokod:

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

Jeśli zbuduję powyższy program i umieszczę plik wykonywalny w C:/meow/, wyświetli on This executable is located in C:/meow/ za każdym razem, gdy zostanie uruchomiony, niezależnie od bieżącego katalogu roboczego.

Jak mógłbym to łatwo osiągnąć używając C#?

Author: Dante is not a Geek, 2009-11-02

7 answers

MSDN ma Artykuł , który mówi, aby używać System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase; jeśli potrzebujesz katalogu, użyj System.IO.Path.GetDirectoryName na tym wyniku.

Albo, jest krótszy Application.ExecutablePath który "pobiera ścieżkę do pliku wykonywalnego, który uruchomił aplikację, w tym nazwę pliku wykonywalnego", więc może to oznaczać, że jest nieco mniej niezawodny w zależności od tego, jak aplikacja została uruchomiona.

 93
Author: Mark Rushakoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-01 22:03:32
AppDomain.CurrentDomain.BaseDirectory
 36
Author: Liquid Core,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 14:18:50
using System.Reflection;

string myExeDir = new FileInfo(Assembly.GetEntryAssembly().Location).Directory.ToString();
 11
Author: newb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-13 12:01:04

" pobiera ścieżkę lub lokalizację UNC załadowanego pliku zawierającego manifest."

Zobacz: http://msdn.microsoft.com/en-us/library/system.reflection.assembly.location.aspx

Application.ResourceAssembly.Location
 4
Author: Mike de Klerk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 18:07:54
var dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

Wskoczyłem na najlepiej ocenianą odpowiedź i stwierdziłem, że nie dostałem tego, czego oczekiwałem. Musiałem przeczytać komentarze, aby znaleźć to, czego szukałem.

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

 3
Author: user1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 15:38:20

Przypuśćmy, że tak .plik konfiguracyjny w aplikacji konsoli i teraz zaczynam jak poniżej.

Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\YourFolderName\\log4net.config";
 1
Author: Muhammad Mubashir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-25 11:14:15

Na mojej stronie, użyłem, z aplikacją formularza:

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

Pobiera ścieżkę uruchamiania aplikacji.

 1
Author: Sébastien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 22:59:46