Почему моя служба 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 для каждой службы.