Microsoft KB Archive/186391

= FIX: ATL Controls Don't Remove CLSID Key During Unregistration =

Article ID: 186391

Article Last Modified on 12/2/2003

-

APPLIES TO

 Microsoft ActiveX Template Library 2.0, when used with:  Microsoft Visual C++ 4.2 Enterprise Edition

 Microsoft Visual C++ 4.2 Professional Edition

 Microsoft Visual C++ 5.0 Enterprise Edition

 Microsoft Visual C++ 5.0 Professional Edition</li></ul> </li> Microsoft ActiveX Template Library 2.1, when used with:  Microsoft Visual C++ 4.2 Enterprise Edition</li></ul>

 Microsoft Visual C++ 4.2 Professional Edition</li></ul>

 Microsoft Visual C++ 5.0 Enterprise Edition</li></ul>

 Microsoft Visual C++ 5.0 Professional Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q186391

<div class="symptoms_section">

SYMPTOMS
When you unregister an ATL ActiveX control using "REGSVR32.EXE /u," not all registry keys are removed. Specifically, the following subkeys under HKEY_CLASSES_ROOT\CLSID\{ } are not removed:


 * Insertable
 * MiscStatus
 * ToolboxBitmap32

<div class="cause_section">

CAUSE
The .rgs (Registrar Script) file created by the ATL Object Wizard has a duplicate entry for the Programmable subkey. When the unregistration code encounters the duplicate, it aborts and fails to remove any other keys that come after the duplicate entry.

<div class="resolution_section">

RESOLUTION
Open the .rgs file and remove the duplicate entry.

For example, in the following code remove the second occurrence of the line "ForceRemove 'Programmable'":

Sample Code
NoRemove CLSID {     ForceRemove {C875C6A0-E8F9-11D1-8F73-00C04F9403C2} = s 'PolyCtl Class' {        ProgID = s 'PolyCtl.PolyCtl.1' VersionIndependentProgID = s 'PolyCtl.PolyCtl' ForceRemove 'Programmable' InprocServer32 = s '%MODULE%' {           val ThreadingModel = s 'Apartment' }        ForceRemove 'Control' // Remove the next line. It's a duplicate that causes the parser to  // abort. ForceRemove 'Programmable' ForceRemove 'Insertable' ForceRemove 'ToolboxBitmap32' = s '%MODULE%, 1' 'MiscStatus' = s '0' {           '1' = s '131473' }        'TypeLib' = s '{C875C692-E8F9-11D1-8F73-00C04F9403C2}' 'Version' = s '1.0' }  } To avoid this problem in future .rgs files generated by the wizard, remove the same duplicate line from the following files. The wizard uses these files when creating the .rgs files:

C:\Program Files\DevStudio\SharedIDE\Template\atl\Control.rgs

C:\Program Files\DevStudio\SharedIDE\Template\atl\Ie3ctl.rgs

<div class="status_section">

STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual C++ version 6.0 for Windows.

<div class="moreinformation_section">

MORE INFORMATION
Entries under HKEY_CLASSES_ROOT\Interface and HKEY_CLASSES_ROOT\TypeLib are also not removed. You must add a call to UnregisterTypeLib to DllUnregisterServer. This is documented in the following Knowledge Base article:

179688 PRB: ATL Servers Do Not Unregister Their Type Library

(c) Microsoft Corporation 1998, All Rights Reserved. Contributions by Samson Tanrena, Microsoft Corporation

Additional query words: unregister

Keywords: kbbug kbfix kbregistry kbvc600fix kbatl300fix kbctrlcreate kbwizard KB186391

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.