Службы Windows - это программы, которые запускаются еще до того, как пользователь вошел в свою учетную запись.Это цель службы Windows, и по этому определению у вас нет доступа к определенным переменным среды пользователя (например,% AppData%), поскольку вы не находитесь в сеансе пользователя , поэтому ваш адрес будет преобразован во что-то Нечетный Если вы напишите его в .txt, вы увидите результат.
Службы Windows (по вашим определениям) будут запускаться с помощью LocalSystem, LocalService или NetworkService.Перейдите в TaskManager-> Services-> Open Services и посмотрите Log On As
Столбец.
Таким образом, вы должны использовать общий путь, который будет доступен через ваш сервис.
Самое ужасное решение - заставить вашу Службу дождаться входа пользователя в систему и выдать себя за его токен.
Я предпочту выбрать лучшее место.
Существует способ отладки и просмотра ошибок в вашей службе (в UserSession ) в VisualStudio.Измените ваш Program.cs на что-то вроде:
static void Main()
{
#if DEBUG
var MainService = new MainService();
MainService.OnDebug();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MainService()
};
ServiceBase.Run(ServicesToRun);
#endif
}
и добавьте функцию OnDebug к вашей службе:
public void OnDebug()
{
OnStart(null);
}
, если вы отладите свой проект таким образом, вы увидите, что ваша служба работаетработает как ожидалось !!!