Когда запускается служба Windows, текущим каталогом является системный каталог, как вы действительно, похоже, находите. Это текущий каталог, который используется для преобразования относительных путей в абсолютные, а не каталог приложения (службы). (Проверьте переменную Environment.CurrentDirectory
, если хотите подтвердить это.)
Здесь может пригодиться следующий вспомогательный метод:
public static string GetAppRelativePath(string path)
{
return Path.Combine(Path.GetDirectoryName(
Assembly.GetEntryAssembly().Location), path);
}
Который вы затем можете использовать как:
using (FileStream stream = new FileStream(Utilities.GetAppRelativePath(
"MyService.xml"), FileMode.Open, FileAccess.Read))
{
// Read file
}
Путь примет значение C:\Services\MyService\MyService.xml
, как вы хотите.