2010-06-28 3 views
1

J'ai une petite application console contenant un serveur web écrit en C#. Lorsque vous essayez de le convertir en service Windows, je reçois une erreur 1053, et quand je l'ai vue l'erreur LOGGUE montre:Le service Windows affiche une erreur 1053 - System.IO.DirectoryNotFoundException

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() 

qui doit le code suivant:

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); 

J'essayer mettre un chemin relatif à l'endroit où mes fichiers html sont situés, et j'ai essayé de lui donner un chemin fixe fx: c: \ pages web, mais sans succès. J'ai toujours la même erreur. Dois-je définir une sorte de permission/sécurité pour que mon service puisse accéder à ce dossier? Le serveur Web est basé sur un projet CodePlex: http://webserver.codeplex.com/

Mon onstart et méthodes 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(); 
     } 
    } 

Répondre

1

J'ai eu exactement le même problème il y a environ une semaine. Le problème est qu'il n'existe aucun paramètre de "chemin de démarrage" pour les services Windows, de sorte que les chemins relatifs aux fichiers de la solution ne fonctionneront pas.

Cette fonction obtient le dossier du service est en cours d'exécution, vous devez préfixer que pour "\\Webpages" et ne pas utiliser .\\WebPages"

Hope this helps

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

qui a fait l'affaire! Merci! – lmkk

0

Sur le serveur, si ne Démarrer -> Exécuter, tapez services.msc (sur le serveur 2008 juste Démarrer -> Type services.msc) et appuyez sur Entrée, vous obtiendrez la liste des services. Trouvez le vôtre dans la liste et affichez les propriétés. Si vous allez à l'onglet Connexion, vous verrez l'utilisateur que le service est configuré comme. S'il est défini pour Local System, vous ne devriez pas avoir à vous soucier des autorisations de sécurité des fichiers/répertoires. Si elle est définie pour autre chose, assurez-vous que le compte a accès aux fichiers/répertoires.

Questions connexes