?
Solved

Quit Outlook

Posted on 2006-06-19
5
Medium Priority
?
1,107 Views
Last Modified: 2012-08-14
I have a need to programmatically quit Microsoft Outlook.  I am writing the code in VB.NET; but I would not expect that the basics of the technique itself would not be language specific.  

Assume that Microsoft Outlook is running.  The following code does not work:

      Private Sub QuitOutlook()
            Dim oApp As Outlook.Application = New Outlook.Application
            Dim oNS As Outlook.NameSpace = oApp.GetNamespace("mapi")
            oApp.Quit()
            oApp = Nothing
      End Sub

The result of the above code is that Outlook is hidden but "Outlook.EXE" still appears in the "Windows Task Manager".

I *don't* want to "kill the process".  Killing the Outlook process *does* remove "Outlook.EXE" from the Task Manager.  However, if the user happens to have an email message *unsaved* draft that they are currently working on, all work is lost.  I want the user to have the option of saving their changes.  The "QuitOutlook() code snippet I provided in the above paragraph *will* prompt the user with the "Do you want to save changes?" warning message before the window goes away -- but the problem with QuitOutloook() is that Outlook.exe doesn't *completely* go away.


The addition of “oApp.Session.Logoff()” does not help.
The addition of “oNS.Logoff()” does not help.

I have also noticed that QuitOutlook() only *sometimes* works when running within the Visual Studio VB.NET environment (debugger), but *never* works when I “Rebuild the Solution” and run the project exe.

I don’t know whether the following information will help anyone determine what the problem is    . . .
Even if I *manually* quit Outlook (select “Exit” from the Outlook’s “File” menu) after calling the QuitOutlook() code snippet, the “Outlook.EXE” still shows up in the Task Manager.  And each time I manually launch Outlook the “Mem Usage” item in the Task Manager for Outlook.EXE continues to grow.  This indicates some sort of memory leak.  In this case the only way to get rid of “Outlook.EXE” from the Task Manager is to kill the process either programmatically or from within the Task Manager.

Does anyone have any ideas?  It would seem to me that quitting an application would be easy!


0
Comment
Question by:richelieu7777
  • 2
  • 2
5 Comments
 
LVL 96

Accepted Solution

by:
Bob Learned earned 2000 total points
ID: 16934309
1) Add Imports line
 
   Imports System.Runtime.InteropServices

2) Add a marshal call to release resources

   oApp.Quit()
   Marshal.ReleaseComObject(oApp)

3) Force garbage collection

   GC.Collect()

Bob
0
 

Author Comment

by:richelieu7777
ID: 16934463
Do I put the Marshal.ReleaseComObject(oApp) and GC.Collect() right after the "oApp.Quit" or after the "oApp = Nothing"?  I just want to clarify.
0
 

Author Comment

by:richelieu7777
ID: 16934475
Or do I put the Marshal.ReleaseComObject(oApp) and GC.Collect() *in lieu of* the oApp = Nothing and delete "oApp = Nothing"
0
 
LVL 96

Expert Comment

by:Bob Learned
ID: 16934546
With Marshal.ReleaseComObject and garbage collection, you don't need to set the oApp to Nothing.  If you leave it in, it won't hurt anything, unless you put it before ReleaseComObject, or you will get an exception.

Bob
0
 

Expert Comment

by:epiphonedot
ID: 23755606
I'm building a COM dll in .NET that accesses Outlook for contacts and am trying to use this method to close Outlook, but it does not work. In testing, I took out all references except for an instance of the  Outlook Application. Is there something additional I need to know when using this method to close Outlook while using it in a class as opposed to an executable perhaps?
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

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

Question has a verified solution.

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

In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
The Relationships Diagram is a good way to get an overall view of what a database is keeping track of. It is also where relationships are defined. A relationship specifies how two tables connect to each other. As you build tables in Microsoft Ac…
Suggested Courses
Course of the Month9 days, 16 hours left to enroll

569 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