File io 进程停止后,c#无法删除日志文件

File io 进程停止后,c#无法删除日志文件,file-io,c#-4.0,process,File Io,C# 4.0,Process,我在一台服务器上有许多进程,我试图停止、删除日志文件并最终重新启动这些进程。我的问题是,一旦所有进程停止(即使是写入日志文件的进程),我就无法通过编程方式删除日志文件(但我可以手动删除)。我收到的错误是“该进程无法访问该文件,因为它正被另一个进程使用。即使我验证该进程已停止并使线程处于睡眠状态,我也无法删除该文件。” 我试过Controller.close()Controller.reset();似乎什么都没用 public static void Stop()

我在一台服务器上有许多进程,我试图停止、删除日志文件并最终重新启动这些进程。我的问题是,一旦所有进程停止(即使是写入日志文件的进程),我就无法通过编程方式删除日志文件(但我可以手动删除)。我收到的错误是“该进程无法访问该文件,因为它正被另一个进程使用。即使我验证该进程已停止并使线程处于睡眠状态,我也无法删除该文件。”

我试过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);
                }
            }
        }
    }
}

停止时,您的所有服务是否都对正在写入的文件调用Close?

Conrad Frix是正确的,尽管服务停止了进程,但进程仍在运行,没有释放该文件。

您确定
Controller.Stop()
没有引发异常吗?您正在调用
DeleteLogFiles()
即使失败。当我RDP到机器上并刷新进程列表时,我可以验证进程是否正确停止。这不在我给出的示例中,但我尝试过,只是验证了出于某种原因它没有释放文件。奇怪的是,它允许我手动删除它们。您是否在公开后手动删除文件静态void Stop()已被调用,但-一旦进程消失,文件的句柄将被释放。您可能希望尝试使用ProcessExplorer并使用CTRL-F来验证哪个进程是罪魁祸首。您可以在此处找到它