2010-07-16 3 views
0

J'ai de nombreux processus sur un serveur que j'essaie d'arrêter, de supprimer les fichiers journaux et éventuellement de redémarrer. Mon problème est que, une fois que tous les processus s'arrêtent (même celui qui écrit dans le fichier journal), je suis incapable de supprimer par programmation les fichiers journaux (mais je peux manuellement). L'erreur que je reçois est "le processus ne peut pas accéder au fichier car il est utilisé par un autre processus.Même lorsque je vérifie que le processus s'est arrêté et que le thread est mis en veille, je ne peux pas le supprimer ..C# Impossible de supprimer le fichier journal après l'arrêt du processus

() controller.reset(), rien ne semble fonctionner

 public static void Stop() 
     { 
      foreach (var service in Services) { 
       Controller.ServiceName=service; 

       if (Controller.Status == ServiceControllerStatus.Stopped) { 
        Console.WriteLine("{0} was not running.", Controller.DisplayName); 

       }else { 
        Console.WriteLine("Stopping {0} on {1}", Controller.DisplayName, Controller.MachineName); 

        try { 
         Controller.Stop(); 
         Controller.WaitForStatus(ServiceControllerStatus.Stopped); 

        } catch (InvalidOperationException) { 
         Console.WriteLine("Could not stop {0}", Controller.DisplayName); 
       } 
        Console.WriteLine("Service {0} now set to {1}", Controller.DisplayName, Controller.Status); 
       } 
      } 

      Console.WriteLine("\nDeleting Log Files on " + Controller.MachineName + " ..."); 
      DeleteLogFiles(); 

     } 

     private static void DeleteLogFiles() 
     { 
      foreach (var file in 
       Paths.SelectMany(path => FormatsToDelete, Directory.GetFiles).SelectMany(fileList => fileList)) { 
       try { 
        File.Delete(file); 
       }catch(IOException io) { 
        Console.WriteLine("\n" + io.Message); 
       } 
      } 
     } 
    } 
} 
+0

Êtes-vous sûr que 'Controller.Stop()' n'a pas déclenché d'exception? Vous appelez 'DeleteLogFiles()' même si cela échoue. – ChrisF

+0

Lorsque je RDP à la machine et actualiser la liste des processus, je peux vérifier que le processus s'arrête correctement. – Ryan

Répondre

0

Conrad Frix avait raison.? , bien que le service ait arrêté le processus était toujours en cours d'exécution et n'a pas libéré le fichier

0

-ce que tous vos services d'appels Fermer les fichiers qu'ils écrivent quand ils sont Stop'ped

+0

ce n'est pas dans l'exemple que j'ai donné, mais je l'ai essayé et juste vérifié que, pour une raison quelconque, il ne libère pas le fichier. la partie impaire est quand il me laissera les supprimer manuellement. – Ryan

+3

Vous pouvez essayer d'utiliser ProcessExplorer et utiliser CTRL-F pour vérifier quel processus est responsable. Vous pouvez l'obtenir ici http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx –

+0

Est-ce que vous supprimez manuellement les fichiers une fois que votre public static static Stop() a été appelé, cependant - une fois que le processus se termine alors les poignées aux dossiers seront libérées de toute façon. –

Questions connexes