c # Не удается удалить файл журнала после остановки процесса - PullRequest
0 голосов
/ 16 июля 2010

У меня много процессов на сервере, которые я пытаюсь остановить, удалить файлы журналов и в конечном итоге перезапустить. Моя проблема в том, что, как только все процессы останавливаются (даже тот, который пишет в файл журнала), я не могу программно удалить файлы журнала (но я могу вручную). Я получаю сообщение об ошибке: «процесс не может получить доступ к файлу, потому что он используется другим процессом. Даже когда я проверяю, что процесс остановлен и переводит поток в спящий режим, я не могу удалить файл.

Я пробовал Controller.close () controller.reset (); кажется, ничего не работает.

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

Ответы [ 2 ]

0 голосов
/ 20 июля 2010

Конрад Фрикс был прав, хотя служба остановила процесс, который все еще работал, и не выпустила файл.

0 голосов
/ 17 июля 2010

Все ли ваши Сервисы вызывают Close для файлов, в которые они записывают, когда они остановлены?

...