Почему моя служба Windows не может получить доступ к папке с файлами в них?

Я настроил консоль, библиотеку и сервисный проект. Проект библиотеки загружает файлы в папку и сохраняет текст в переменных.

Затем консольный проект будет манипулировать этими переменными. Я могу успешно запустить консольный проект, и он без проблем загружает файлы. Для файлов установлено значение "Всегда копировать" в DLL, и они указываются в качестве содержимого для действия сборки.

Когда я пытаюсь запустить точно такой же код в службе.

File.ReadAllText(@"MyFolder\SomeFile.txt");

Выдает следующее исключение.

The type initializer for 'MyLibrary.Data.ReadFiles' threw an exception.

Я использую тип проекта установки для создания установщика. После того, как служба установит папку MyFolder существует в папке приложений службы, а также в файлах. Что еще может быть причиной моей проблемы из-за невозможности чтения этих файлов службой?

РЕДАКТИРОВАТЬ 1

public class ReadFiles {
    public static string DataFile = File.ReadAllText(@"MyFolder\SomeFile.txt");
}

1 ответ

Решение

Учетная запись службы, под которой вы запускаете службу Windows, не имеет прав на чтение из местоположения, к которому вы пытаетесь получить доступ. Ошибка, которую вы видите, связана с тем, что код, который вы показали, скорее всего, существует в конструкции типа ReadFiles,

Столкнулся с аналогичной проблемой в одной из служб Windows для запуска приложения node js для отправки электронных писем. Он работал нормально, когда мы запускались из того же каталога, но при запуске того же приложения, что и служба Windows, возникали проблемы и не могли отправлять электронные письма. Комментарий от @meanbunny действительно помог, поэтому добавил его в качестве ответа.

Служба Windows не может получить доступ к каталогу / файлам, если они указаны в коде как относительный путь, лучше использовать абсолютный путь или быть более гибким, как @Mike, упомянутый в его комментарии, чтобы использовать app.config для каждой службы.

Другие вопросы по тегам