Служба Windows выдает ошибку 1053 - System.IO.DirectoryNotFoundException - PullRequest
1 голос
/ 28 июня 2010

У меня есть небольшое консольное приложение, содержащее веб-сервер, написанный на c #.При попытке преобразовать его в службу Windows появляется сообщение об ошибке 1053, и при просмотре журнала ошибок отображается:

Application: YCSWebServerService.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.IO.DirectoryNotFoundException
Stack:
   at HttpServer.Resources.FileResources.Add(System.String, System.String)
   at HttpServer.Resources.FileResources..ctor(System.String, System.String)
   at YCSWebServer.WebServer..ctor(SerialCommunication.SerialCommunicationWrapper, YCSInterfaces.IBuilder, SerialCommunication.SerialCommunication)
   at YCSConfiguration.Builder..ctor()
   at YCSWebServerService.YCSWebServerService..ctor()
   at YCSWebServerService.Program.Main()

, что связано со следующим кодом:

server = new Server();

// Where to find the html page to render
server.Resources.Add(new FileResources("/", ".\\Webpages"));
server.Add(new FileModule(server.Resources, false));

//Create a http listener
HttpListener listener = HttpListener.Create(IPAddress.Any, 8888);

// use one http listener.
server.Add(listener);

server.RequestReceived += ServerRequestReceived;

// start server, can have max 10 pending accepts.
server.Start(10);

Я пытаюсь установить относительный путь к месту расположения моих html-файлов, и я пытаюсь дать ему фиксированный путь fx: c: \ webpages, но безуспешно.Я всегда получаю одну и ту же ошибку.Я установил какое-то разрешение / безопасность для того, чтобы мой сервис получил доступ к этой папке?Веб-сервер основан на проекте codeplex: http://webserver.codeplex.com/

Мои методы запуска и остановки:

public partial class YCSWebServerService : ServiceBase
    {
        private Builder _builder;
        public YCSWebServerService()
        {
            InitializeComponent();
            _builder = new Builder();
        }

        protected override void OnStart(string[] args)
        {
            _builder.Start();
        }

        protected override void OnStop()
        {
            _builder.Stop();
        }
    }

Ответы [ 2 ]

1 голос
/ 28 июня 2010

У меня была точно такая же проблема около недели назад. Проблема заключается в том, что для служб Windows отсутствует параметр «путь запуска», поэтому относительные пути к файлам в решении не будут работать.

Эта функция возвращает папку, в которой выполняется служба, вам нужно добавить ее к "\\Webpages" и не использовать .\\WebPages"

Надеюсь, это поможет

private static string ExecutingFolder()
{
    string exeUri = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
    Uri uri = new Uri(exeUri);
    string physicalExePath = uri.LocalPath;
    return IO.Path.GetDirectoryName(physicalExePath);
}
0 голосов
/ 28 июня 2010

На сервере, если выполнить Пуск -> Выполнить, введите services.msc (на сервере 2008 просто Пуск -> введите services.msc) и нажмите Enter, вы получите список служб. Найдите свой в списке и посмотрите свойства. Если вы перейдете на вкладку «Вход в систему», вы увидите пользователя, для которого настроена служба. Если он установлен для локальной системы, вам не нужно беспокоиться о правах доступа к файлам / каталогам. Если он настроен на что-то другое, убедитесь, что учетная запись имеет доступ к файлам / каталогам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...