Katalog wykonywalny, z którego uruchamiana jest aplikacja?

Muszę pobrać ścieżkę (Nie plik wykonywalny), z której uruchamiana jest moja aplikacja:

System.AppDomain.CurrentDomain.BaseDirectory()

Kiedy uruchamiam powyższe polecenie z & " / images / image.jpg " na moim lokalnym komputerze działa dobrze, ale po zainstalowaniu aplikacji na innym komputerze mówi, że nie może znaleźć pliku i jest wiele dodatkowych informacji o ścieżce.

Potrzebuję tylko katalogu, gdzie aplikacja jest uruchomiona. Koduję w VB.NET z Visual Studio 2008.

Dzięki!
Author: Mike Dinescu, 2010-04-07

6 answers

Dim strPath As String = System.IO.Path.GetDirectoryName( _
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase)

Zaczerpnięte z Jak: określić ścieżkę wykonującej aplikację (MSDN)

 27
Author: Justin Niessner,
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
2010-04-07 14:58:36

To jest pierwszy post w google, więc pomyślałem, że opublikuję różne sposoby, które są dostępne i jak je porównać. Niestety nie mogę wymyślić, jak stworzyć tutaj tabelę, więc jest to obraz. Kod dla każdego znajduje się pod obrazkiem, używając w pełni kwalifikowanych nazw.

Tutaj wpisz opis obrazka

My.Application.Info.DirectoryPath

Environment.CurrentDirectory

System.Windows.Forms.Application.StartupPath

AppDomain.CurrentDomain.BaseDirectory

System.Reflection.Assembly.GetExecutingAssembly.Location

System.Reflection.Assembly.GetExecutingAssembly.CodeBase

New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase)

Path.GetDirectoryName(Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path)))

Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path))
 33
Author: Derek Ziemba,
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-01-07 06:10:23
Dim P As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)
P = New Uri(P).LocalPath
 14
Author: MrCalvin,
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
2014-09-07 09:28:54

[3]} musiałem to wiedzieć i przyszedłem tutaj, zanim przypomniałem sobie klasę ochrony środowiska.

W przypadku, gdyby ktoś inny miał ten problem, po prostu użyj tego: Environment.CurrentDirectory.

Przykład:

Dim dataDirectory As String = String.Format("{0}\Data\", Environment.CurrentDirectory)

Po uruchomieniu z Visual Studio w trybie debugowania:

C:\Development\solution folder\application folder\bin\debug
To jest dokładnie to zachowanie, którego potrzebowałem, i jest dość proste i proste.
 12
Author: Jason Alls,
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
2017-06-23 08:22:11

Możesz użyć właściwości statycznej StartupPath klasy aplikacji.

 5
Author: Mike Dinescu,
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
2010-04-07 14:58:51

Możesz napisać:

Path.Combine(Path.GetParentDirectory(GetType(MyClass).Assembly.Location), "Images\image.jpg")
 0
Author: SLaks,
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
2010-04-07 15:25:51