Я создал службу Windows. Я делаю настройку службы с помощью установщика Windows. У меня есть один файл XML, например файл конфигурации. Всякий раз, когда я отлаживаю службу Windows с присоединением проекта отладки, он работает нормально. Но после установки я вижу событие, говорящее о том, что не удалось найти файл example.xml в C:\Windows\system32. Это повторяющаяся проблема. Может ли кто-нибудь сказать мне, что происходит с этим. Или какие-либо предложения?
XML-файл не может быть обнаружен после установки службы Windows
Ответы:
Это не проблема установщика. Службы Windows всегда запускаются с System32 в качестве текущего каталога. Добавьте эту строку в метод Main() в файле Program.cs перед запуском каких-либо служб.
Environment.CurrentDirectory = new FileInfo(Assembly.GetExecutingAssembly().FullName).DirectoryName;
Скорее всего, файл просто находится не там, где вы его ищете.
Скорее всего, ваш код выглядит в «текущей рабочей папке», которая во время отладки в VS совпадает с приложением, но в случае запуска в качестве службы/из командной строки отличается.
Убедитесь, что ваш код загружает файл из ожидаемого местоположения файла (т. е. рядом с приложением), а не из какого-либо относительного пути (например, «myfile.xml»).
Почему вы сохраняете вещи в папках Windows? Если для этого нет действительно веской причины, это плохо. Установите свою конфигурацию в том же месте, где запущено ваше приложение, и получите путь к файлу с помощью:
var folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var configPath = Path.Combine(folderPath, configFileName);
Проблема в том, что ваша служба не работает от имени администратора. Если служба не запущена от имени администратора, она не сможет читать файлы в папке system32.
Измените свойства службы, чтобы она работала от имени администратора. Это должно решить проблему.