MSDev.exe does not automatically close when the COM reference count is zero

This article was previously published under Q192912
This article has been archived. It is offered "as is" and will no longer be updated.
SYMPTOMS
After a Component Object Model (COM) client has loaded MSDev.exe using theCOM automation interface, MSDev.exe does not automatically close when itslast reference is released.
RESOLUTION
Use Application.Quit method of MSDev.exe to cause it to remove itself frommemory just before releasing the last reference to it. See the MOREINFORMATION section of this article for sample Visual C++ and Visual Basiccode.
STATUS
This behavior is by design.
MORE INFORMATION
MSDev.exe is the Developer Studio shell. In Visual Studio 97 it hostsVisual C++, Visual InterDev, Visual J++, and the InfoViewer. In VisualStudio 6.0, it only hosts Visual C++. It supports an automation interfacethat exposes its object model. An external application using the objectmodel can access internal functions to automate tasks such as buildingprojects, changing their settings, modifying text files, and so on.

The automation interface is based on COM technology. Most COM automationobjects count the number of COM clients referencing them, and automaticallyterminate themselves when the reference count goes to zero. One example isMicrosoft Word, which starts when a COM client creates a Word.Documentobject, and terminates when the last reference to that object is released.

In Visual C++, the following code illustrates proper automation ofMSDev.exe:
    #import <devshl.dll>       // Create smart pointers for automation.   using namespace DSSharedObjects;   CoInitialize(NULL);        // Initialize COM.   IApplicationPtr pApplication;   if (pApplication.CreateInstance(__uuidof(DSSharedObjects::Application))    == S_OK)   {      // Perform automation steps with pApplication.      pApplication->Quit();   }   CoUninitialize();				
This Visual Basic code illustrates the use of the Quit method:
   Dim msdev As Object   Set msdev = CreateObject("MSDev.Application") ' Create a new instance of                                                 ' MSDev.exe.   ' Perform automation steps here.   msdev.Quit           ' Force MSDev.exe to unload.   Set msdev = Nothing  ' De-reference MSDev.exe.				
REFERENCES
For additional information, please see the following article in theMicrosoft Knowledge Base:
192913BUG: EnableModeless Causes Events to Fire Late
For more information on Automation and the Developer Studio object model,please see the following Help topics:
Visual C++ 5.0 Online Help: Developer Products; Visual C++; Developer Studio Environment User's Guide; Automating Tasks in Developer Studio; Developer Studio Objects; Overview: Developer Studio Objects; Automating Developer Studio Tasks from Other Applications

MSDN Library: Platform SDK; COM and ActiveX Object Services; COM

Visual C++ 6.0 Online Help: Visual C++ Documentation; Using Visual C++; Visual C++ User's Guide; Automating Task's in Visual C++; Developer Studio Objects; Overview: Developer Studio Objects; Automating Developer Studio Tasks from Other Applications
Properties

Article ID: 192912 - Last Review: 02/28/2014 04:16:58 - Revision: 3.0

  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Visual Studio 97 Service Pack 3
  • Microsoft Visual InterDev 1.0 Standard Edition
  • Microsoft Visual J++ 1.0 Standard Edition
  • Microsoft Visual J++ 1.1 Standard Edition
  • kbnosurvey kbarchive kbtshoot kbide kbautomation kbdevstudio kbprb kbfaq KB192912
Feedback