2012-04-29 12 views
37

Mam usługę Windows, która powinna szukać pliku konfiguracyjnego w bieżącym katalogu.Usługa Windows - pobierz bieżący katalog

więc używam directory.getcurrentdirectiry() ale zamiast służby katalog wrócę

c:\windows\system32 

jakiś pomysł, dlaczego iw jaki sposób należy uzyskać katalogu usług?

Odpowiedz

6

Nie używaj Directory.GetCurrentDirectory(). Miałem ten sam dokładny problem z powrotem: C: \ Windows \ System32. Użyj tego zamiast:

Path.GetDirectoryName(Application.ExecutablePath);

+0

Najwyraźniej musisz dodać plik System.Windows.Forms.dll, aby to zadziałało. –

+0

Otrzymuję "aplikacja nazwa nie istnieje w bieżącym kontekście" – red888

26

Spróbuj tego:

System.Reflection.Assembly.GetEntryAssembly().Location 
+0

Linia ta daje mi katalog, że serviec pracuje, ale także sam montaż ... sonthig jak - c: \ serviceDir \ app.exe Chciałbym tylko katalog – MoShe

+0

@ Mosze - To jest pełna ścieżka. – coder

+2

Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly(). Lokalizacja) – VhsPiceros

88

Można ustawić bieżący katalog do katalogu, czy usługa jest uruchomiona od włączając tę ​​linię w kodzie:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory); 

Ważną częścią tego jest :

System.AppDomain.CurrentDomain.BaseDirectory 

To zwraca ścieżkę do katalogu, z którego uruchamiana jest twoja usługa.

+4

'System.AppDomain.CurrentDomain.BaseDirectory' pracował dla mnie, daje katalog. 'System.Reflection.Assembly.GetEntryAssembly(). Lokalizacja' zwraca katalog oraz nazwę pliku wykonywalnego – j00hi

+0

@ j00hi Tak, dziękuję za wyjaśnienie: D – Jed

+1

Ta odpowiedź działa lepiej w różnych sytuacjach. Używam programu NCrunch, a zaakceptowana odpowiedź nie pomoże tam. – reydelleon

15

coraz katalog z pełną ścieżką:

var location = System.Reflection.Assembly.GetEntryAssembly().Location; 
var directoryPath = Path.GetDirectoryName(location); 

dość głupi błąd przy porównywaniu do pisania usługa Windows :)

+0

To mi pomaga. Dzięki – phanvugiap

2

string applicationDir = AppDomain.CurrentDomain.BaseDirectory;

Powiązane problemy