 <p>I know it is too late, but I found this topic because I had the same problem.</p> <p>And my solution may help other people.</p> <p>The solution above didnt work well because it killed every running instance of Word, though it wasn't opened by the c# program but the user.</p> <p>So this was not that userfriendly.</p> <p>My code checks the processes before/after the creation of the <code>Word.Application</code> Object in c# and writes the IDs of the <code>WINWORD</code> Processes in <code>List&lt;int&gt;</code> then it compares the values in both <code>List&lt;int&gt;</code>. When a <code>processID</code> is not found in both <code>List&lt;int&gt;</code> it kills the process with this ID.</p> <pre><code>public List&lt;int&gt; getRunningProcesses() { List&lt;int&gt; ProcessIDs = new List&lt;int&gt;(); //here we're going to get a list of all running processes on //the computer foreach (Process clsProcess in Process.GetProcesses()) { if (Process.GetCurrentProcess().Id == clsProcess.Id) continue; if (clsProcess.ProcessName.Contains("WINWORD")) { ProcessIDs.Add(clsProcess.Id); } } return ProcessIDs; } </code></pre> <p>Run this twice (one time before the creation of the Word.Application and once after).</p> <pre><code> List&lt;int&gt; processesbeforegen = getRunningProcesses(); // APP CREATION/ DOCUMENT CREATION HERE... List&lt;int&gt; processesaftergen = getRunningProcesses(); </code></pre> <p>Then run <code>killProcesses(processesbeforegen, processesaftergen);</code></p> <pre><code> private void killProcesses(List&lt;int&gt; processesbeforegen, List&lt;int&gt; processesaftergen) { foreach (int pidafter in processesaftergen) { bool processfound = false; foreach (int pidbefore in processesbeforegen) { if (pidafter == pidbefore) { processfound = true; } } if (processfound == false) { Process clsProcess = Process.GetProcessById(pidafter); clsProcess.Kill(); } } } </code></pre>