Mam dwa pliki exe w tym samym folderze, mogę uruchomić exe2 z przycisku w exe1. Dzisiaj obserwowałem klienta podczas sesji zdalnej (usług terminalowych) i exe2 nie uruchomił błędu „Nie znaleziono pliku”, ale exe1 znajdował się w tym samym katalogu, kiedy sprawdzaliśmy. Czy powinienem więc używać AppDomain.CurrentDomain.BaseDirectory czy System.Environment.CurrentDirectory ?
Dzięki
string.GetFullPath(path)
używaEnvironment.CurrentDirectory
zamiastCurrentDomain.BaseDirectory
, ku mojemu zaskoczeniu.Odpowiedzi:
Jeśli chcesz znaleźć pliki w tym samym katalogu co Twoja aplikacja,
AppDomain.CurrentDomain.BaseDirectory
to właściwy wybór.Environment.CurrentDirectory
to wartość, która może i będzie się zmieniać w trakcie działania aplikacji. Na przykład, używając parametrów domyślnych, OpenFileDialog w WinForms zmieni tę wartość na katalog, z którego został wybrany plik.źródło
AppDomain.CurrentDomain.BaseDirectory
zwraca katalog, z którego została załadowana bieżąca domena aplikacji.System.Environment.CurrentDirectory
zwraca bieżący katalog systemowy.W Twoim przypadku
AppDomain.CurrentDomain.BaseDirectory
to najlepsze rozwiązanie.źródło
Powinieneś użyć
AppDomain.CurrentDomain.BaseDirectory
.Na przykład w aplikacji usług systemu Windows:
System.Environment.CurrentDirectory
zwróci C: \ Windows \ system32Podczas
AppDomain.CurrentDomain.BaseDirectory
zwróci [lokalizacja Application.exe]Innym ważnym czynnikiem, na który należy zwrócić uwagę, jest to, że
AppDomain.CurrentDomain.BaseDirectory
jest to właściwość tylko do odczytu, podczas gdy wEnvironment.CurrentDirectory
razie potrzeby może to być coś innego:// Change the directory to AppDomain.CurrentDomain.BaseDirectory Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
źródło
Jak rozumiem, powinieneś użyć
BaseDirectory
.CurrentDirectory
może się zmieniać w trakcie wykonywania programu.źródło
W projektach testowych programu Visual Studio 2010, jeśli włączysz opcję wdrażania Edytuj ustawienia testu, AppDomain.CurrentDomain.BaseDirectory wskazuje folder TestResults \ Out (nie bin \ debug). Chociaż domyślne ustawienie wskazuje folder bin \ debug.
Tutaj znalazłem przekonującą odpowiedź.
Dlaczego AppDomain.CurrentDomain.BaseDirectory nie zawiera „bin” w aplikacji asp.net?
źródło
Zwykle używam czegoś takiego:
string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); AppPath = AppPath.Replace("file:\\", "");
źródło
Przeszedłem też przez te kilka dni wstecz, kiedy używałem
ponieważ powodował problem na serwerze produkcyjnym, ale działał dobrze z moim serwerem lokalnym,
Więc próbowałem z
I zadziałało dla mnie zarówno w środowisku.
Tak więc, jak powiedzieli wszyscy z nich, powinniśmy zawsze iść z
podczas sprawdzania ścieżki w katalogu bieżącej domeny.
poszukaj więcej informacji
Nie można znaleźć części błędu ścieżki na serwerze
źródło