C#: Powerpoint does not Quit?
c#, com, powerpoint, visual-studio
Solution
See the discussion on the same topic here: c# and excel automation - ending the running instance
It covers Excel, but the principles are exactly the same.
Summary: you need to "release" the `Presentations`, `Slides` and (multiple) `Slide` objects. BTW, I wouldn't bother setting the variables to null. That's not necessary or helpful.
Problem
I have a script that opens Powerpoint from my application and exports all slides. After that, I need the application to be closed. I've tried without any luck. Could you please help? ``` using System; using System.Collections.Generic; using System.Text; using System.IO; using Powerpoint = Microsoft.Office.Interop.PowerPoint; using Microsoft.Office.Core; using Microsoft.Office.Interop.PowerPoint; using System.Runtime.InteropServices; namespace PresentrBuilder { class PowerpointConverter { public static void Convert(String file, String safeFile) { Powerpoint.Application PP; Powerpoint.Presentation Presentation; PP = new Powerpoint.ApplicationClass(); PP.Visible = MsoTriState.msoTrue; PP.WindowState = Microsoft.Office.Interop.PowerPoint.PpWindowState.ppWindowMinimized; Presentation = PP.Presentations.Open(file, MsoTriState.msoFalse, MsoTriState.msoTrue, MsoTriState.msoTrue); // Voor elke slide, exporteren String exportSlidesPath = Path.Combine(Properties.Settings.Default.CacheDir, @"presentatienaam1\slides"); // Kijk of de directory bestaat if (!Directory.Exists(exportSlidesPath)) { Directory.CreateDirectory(exportSlidesPath); } // Kijk of er al bestanden in de directory staan // Zo ja: verwijderen String[] files = Directory.GetFiles(exportSlidesPath, "*.png"); if (files.Length > 0) { foreach (string fileName in files) { File.Delete(Path.Combine(exportSlidesPath, fileName)); } } // Elke slide exporteren foreach (Slide slide in Presentation.Slides) { slide.Export(Path.Combine(exportSlidesPath, "slide_" + slide.SlideIndex + ".png"), "PNG", 1024, 768); Marshal.ReleaseComObject(slide); } GC.Collect(); GC.WaitForPendingFinalizers(); Marshal.ReleaseComObject(PP.Presentations); Marshal.ReleaseComObject(Presentation.Slides); Presentation.Close(); Marshal.FinalReleaseComObject(Presentation); PP.Quit(); Marshal.FinalReleaseComObject(PP); } } } ```