我有一个小型控制台应用程序,其中包含用c#编写的Web服务器。当尝试将其转换为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,但没有成功。我总是得到同样的错误。 我是否设置了某种权限/安全性以便我的服务访问此文件夹? Web服务器基于codeplex项目:http://webserver.codeplex.com/
我的onstart和onstop方法:
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();
}
}
答案 0 :(得分:1)
一周前我遇到了同样的问题。问题是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);
}
答案 1 :(得分:0)
在服务器上,如果执行开始 - >运行,键入services.msc
(在服务器2008上只需开始 - >键入services.msc
)并按回车键,您将获得服务列表。在列表中找到您的并查看属性。如果转到“登录”选项卡,您将看到该服务已配置为的用户。如果为本地系统设置,则不必担心文件/目录的安全权限。如果设置为其他内容,请确保该帐户可以访问文件/目录。