2009-03-23 15 views
66

Mam dwa pliki exe w tym samym folderze, mogę uruchomić exe2 z przycisku w exe1. Dzisiaj obserwowałem klienta przez sesję zdalną (usługi terminalowe) i exe2 nie udało się uruchomić błędu "Nie znaleziono pliku", ale exe1 był w tym samym katalogu, kiedy sprawdziliśmy. Więc czy powinienem używać AppDomain.CurrentDomain.BaseDirectory lub System.Environment.CurrentDirectory?Czy należy używać AppDomain.CurrentDomain.BaseDirectory lub System.Environment.CurrentDirectory?

Dzięki

+0

@Jade M Jak ci wykonujący swoją exe1 w terminalu? –

+0

Chcę dodać moje dwa centy, mówiąc, że 'string.GetFullPath (path)' używa 'Environment.CurrentDirectory' zamiast' CurrentDomain.BaseDirectory', ku mojemu zdziwieniu. – JBSnorro

Odpowiedz

6

Jak rozumiem, należy użyć BaseDirectory. CurrentDirectory może ulec zmianie w trakcie wykonywania programu.

145

Jeśli chcesz znaleźć pliki w tym samym katalogu co aplikacja, prawidłowym wyborem jest AppDomain.CurrentDomain.BaseDirectory.

Environment.CurrentDirectory to wartość, która może i będzie zmieniać się podczas bieżącej aplikacji. Na przykład, przy użyciu parametrów domyślnych, OpenFileDialog w WinForms zmieni tę wartość do katalogu, z którego plik został wybrany.

+6

Chciałbym móc głosować na ciebie więcej niż jeden raz na ten temat. – David

+0

Użyłem przycisku 1, aby wyświetlić OpenFileDialog, a następnie przycisk2, aby pokazać Environment.CurrentDirectory, ale nadal pokazywać folder debugowania, dlaczego? –

2

Zwykle używam coś takiego:

  string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 
      AppPath = AppPath.Replace("file:\\", ""); 
14

AppDomain.CurrentDomain.BaseDirectory wraca do katalogu, z którego obecna domena aplikacji został załadowany. System.Environment.CurrentDirectory zwraca bieżący katalog systemowy. W twoim przypadku AppDomain.CurrentDomain.BaseDirectory jest najlepszym rozwiązaniem.

+1

Aby było jasne, System.Environment.CurrentDirectory zwraca bieżący (specyficzny dla procesu) katalog _working_. –

10

Należy użyć AppDomain.CurrentDomain.BaseDirectory.

Na przykład w aplikacji Windows Services:

System.Environment.CurrentDirectory powróci C: \ Windows \ system32

Podczas

AppDomain.CurrentDomain.BaseDirectory powróci [Application.lokalizacja exe]

Innym ważnym czynnikiem, który należy zwrócić uwagę jest to, że AppDomain.CurrentDomain.BaseDirectory jest właściwością tylko do odczytu, natomiast Environment.CurrentDirectory może być coś innego, jeśli to konieczne:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory 
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; 
0

Mam również przez te kilka dni z powrotem, ponieważ używałem

Environment.CurrentDirectory 

gdyż daje mi problemu na serwerze produkcyjnym, ale działa dobrze z moim lokalnym serwerze,

Tak, próbowałem z

To zadziałało dla mnie w obu Środowisku.

Tak, jak wszystkie z nich powiedział, że powinniśmy zawsze iść z

System.AppDomain.CurrentDomain.BaseDirectory; 

jak sprawdza katalog bieżącej domeny na ścieżce.

mają szukać więcej informacji

Could not find a part of path error on server

Powiązane problemy