Solved

Releasing Word object after completion of word automation in C#

Posted on 2010-11-21
5
509 Views
Last Modified: 2013-12-17
I am doing word automation in c# and can't seem to get rid of the word object - both the application and the word get stuck.  I have tried various permutations of the following:

oMyword.oword.Quit();
//Marshal.ReleaseComObject(oMyword.oWord);
  while (Marshal.ReleaseComObject(oMyword.oWord) > 0) ;
     oMyword.oWord = null;
     oMyword = null;
0
Comment
Question by:EylonM
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
5 Comments
 
LVL 24

Expert Comment

by:jimyX
ID: 34183555
try this:

//object junk = System.Reflection.Missing.Value;
....
if(oMyWord != null) {
//oMyWord.Quit(ref junk, ref junk, ref junk);
Marshal.ReleaseComObject(oMyWord);
oMyWord = null;
}
0
 
LVL 9

Accepted Solution

by:
Subrat (C++ windows/Linux) earned 250 total points
ID: 34185289
Modify the following code...
In your reference add Microsoft.Office.Interop.Word

Microsoft.Office.Interop.Word.Application app = null;
        Microsoft.Office.Interop.Word.Document doc = null;
       
       
        app = new Microsoft.Office.Interop.Word.Application();
       
        //Open the document
             private Document OpenDoc(object fname, bool format)
              {
                  
                  object missing = System.Reflection.Missing.Value;
                  object ReadOnly = false;
                  object isVisible = false;
                  try
                  {
                      doc = app.Documents.Open(ref fname, ref missing, ref ReadOnly, ref missing,
                                               ref missing, ref missing, ref missing, ref missing,
                                               ref missing, ref missing, ref missing, ref isVisible,
                                               ref missing, ref missing, ref missing, ref missing);
                  }
                  catch (Exception appexp)
                  {
                      MessageBox.Show(appexp.Message);
                      throw appexp;
                  }
                  isOpen = true;
                  return doc;
        }
       
        // Close the doc
       
        object missing = System.Reflection.Missing.Value;
                      try
                      {
                          doc.Close(ref missing, ref missing, ref missing);
                      }
                      catch (Exception closedocexcpt)
                      {
                          MessageBox.Show(closedocexcpt.Message);
                      }
                  }
            doc = null;
           
           
        // Quit
       
        object missing = System.Reflection.Missing.Value;
                      try
                      {
                          app.Quit(ref missing, ref missing, ref missing);
                      }
                      catch (Exception quit)
                      {
                          MessageBox.Show(quit.Message);
                      }
                app = null;
               
               
       
0
 

Author Comment

by:EylonM
ID: 34185583
Subrat2009, could you show the code that would call Opendoc please?

Thanks
0
 

Author Comment

by:EylonM
ID: 34186406
I discovered the source of the word hanging.  Here is the code that is causing the problem:

RichTextBox rtFile = new RichTextBox();
            string cContents = oMyword.getDocContentsAsString();
            if (cContents.Contains("<<rate_includes>>"))
            {
                oMyword.GoToBookmark("rate_includes");
                rtFile.Text = myReservation.cIncludedTerms;
                oMyword.InserFile(rtFile);
                oMyword.FindAndReplace("<<rate_includes>>", "");
            }

These lines are causing word to hang when I try to release it:
string cContents = oMyword.getDocContentsAsString();
            if (cContents.Contains("<<rate_includes>>"))

Why?  Is cContents somehow a copy of the word object that isn't being released?
0
 

Author Comment

by:EylonM
ID: 34187026
Continuing from above - where the function below seems to be causing the problem:

public string getDocContentsAsString()
        {
            oWord.Selection.WholeStory();
            oWord.Selection.Copy();
            string docContents = Clipboard.GetText();
            return docContents;

        }

0

Featured Post

Resolve Critical IT Incidents Fast

If your data, services or processes become compromised, your organization can suffer damage in just minutes and how fast you communicate during a major IT incident is everything. Learn how to immediately identify incidents & best practices to resolve them quickly and effectively.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question