2012-04-29 4 views
37

У меня есть служба Windows, которая должна искать файл конфигурации в своем текущем каталоге.Служба Windows - получить текущий каталог

Поэтому я использую directory.getcurrentdirectiry() но вместо службы каталогов я получаю обратно

c:\windows\system32 

Любую идею, почему и как я должен получить каталог услуг?

ответ

6

Не используйте Directory.GetCurrentDirectory(). У меня была такая же точная проблема с возвратом C: \ Windows \ System32. Используйте вместо этого:

Path.GetDirectoryName(Application.ExecutablePath);

+0

Очевидно, вам нужно добавить System.Windows.Forms.dll, чтобы это сработало. –

+0

Я получаю "приложение имени не существует в текущем контексте" – red888

26

Попробуйте это:

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

Эта линия дает мне каталог, что serviec работает, но и сама Ассамблея ... sonthig как - C: \ serviceDir \ app.exe Я хотел бы только каталог – MoShe

+0

@ Моше. Это полный путь. – coder

+2

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

88

Вы можете установить текущий каталог на каталог, в котором ваша служба работает с включением этой строки в коде:

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

Важной частью этого является :

System.AppDomain.CurrentDomain.BaseDirectory 

Это возвращает путь к каталогу, из которого работает служба.

+4

'System.AppDomain.CurrentDomain.BaseDirectory' работал для меня, он дает каталог. 'System.Reflection.Assembly.GetEntryAssembly(). Location' возвращает каталог с именем исполняемого файла – j00hi

+0

@ j00hi Да, спасибо за разъяснение: D – Jed

+1

Этот ответ работает лучше для разных сценариев. Я использую NCrunch, и принятый ответ там не поможет. – reydelleon

15

получает каталог из полного пути:

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

довольно глупая проблема при сравнении писать службы окон :)

+0

Это помогает мне. Спасибо – phanvugiap

2

string applicationDir = AppDomain.CurrentDomain.BaseDirectory;

Смежные вопросы