• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 532
  • Last Modified:

Releasing Word object after completion of word automation in C#

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
EylonM
Asked:
EylonM
  • 3
1 Solution
 
jimyXCommented:
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
 
Subrat (C++ windows/Linux)Software EngineerCommented:
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
 
EylonMAuthor Commented:
Subrat2009, could you show the code that would call Opendoc please?

Thanks
0
 
EylonMAuthor Commented:
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
 
EylonMAuthor Commented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now