Component Service MMC hangs if a remote computer is offline

Component Service MMC hangs if a remote computer is offline

  • Comments 3
  • Likes

The Component Services snap-in under Administrative Tools allows you manage the COM+ applications on different computers on your network. This is done by adding the computer to a list which is then saved for the next time you open the application. While this means you don't need to keep adding a computer, it can also cause the application to appear hung if a computer in the list no longer exists.

In the Component Services snap-in, if a you try to add a computer name to the Computers node that does not exist or is not responding, or that ceases to respond at some point, the MMC may become unresponsive. This probably looks like a hang, since the period of unresponsiveness is at least a couple minutes and increases with each user input. If the invalid node is not removed from the Computers list, this will occur every time the user loads the Component Services snap-in and attempts to expand the Computers node. The same behavior may be noticed if a computer that has firewall enabled is added to the list.

The MMC should respond after a while, but the time span of the hang can vary depending on the number of stale objects that are available under the Computer node.

 

 Dcomcnfg

 

The following work-arounds can be used to get around the period of unresponsiveness:

 

WorkAround 1

1. Open Component Services

Start -> Run -> dcomcnfg

or

Control Panel - > Administrative tools -> Component Services.

2. Drop down into the Computers node from the Component Services node.

3. Make a note of the computer names in this list (apart from My Computer) that are no longer available on the network.

4. Close Component Services (you may need to kill the application from Task Manager if it is not responding).

5. Open the HOSTS file in a text editor (the file can be found in \System32\drivers\etc\; backup a copy of the file first)

6. Add entries for each computer name you noted, and assign each the loopback IP address (127.0.0.1). This will result in a quick valid response from each computer name when the plug-in tries to access it. It won’t be the real IP address of the unavailable computer, but the MMC does not know that.

7. Save the HOSTS file.

8. Reopen Component Services and drop down to the Computers list.

9. You may take a bit of time, but now you should be able to select the invalid computers in the list and remove them.

10. Once the invalid computer names are removed and the plug-in is responsive when opened, edit the HOSTS file again to remove the entries you've added.

 

Workaround 2

The following VBS script can be used to delete the reference of the computers from the COM+ catalogue. Copy the below code to a notepad file and rename it to VBS (eg- RemoveMachineComAdmin.vbs). While entering the name of the server make sure it is entered as it was used in the component console; it is case sensitive.

 

NOTE: Microsoft does not support the creation or functionality of custom scripts. This script is supplied as an example, and is not officially supported. Use at your own risk.

 

' Script to delete Machine names from COM+ catalog

' ===========================================================

Dim catalog 'As COMAdmin.COMAdminCatalog

Dim Machines 'As COMAdminCatalogCollection

Set Catalog = CreateObject("COMAdmin.COMAdminCatalog")

'Collect input from user

Dim sMachine

sMachine = Inputbox("Enter Machine name to be deleted (case sensitive):","Delete Machine name", "My Computer")

If sMachine="" Then

MsgBox"Invalid input, restart the program"

WScript.Quit

End If

If sMachine="My Computer" Then

msgbox ("You cannot delete My Computer")

WScript.Quit

End If

'Get the Machines collection in COM+ catalog

Set Machines = Catalog.GetCollection("ComputerList")

Machines.Populate

'Get the count of the number of objects

MsgBox("No. of Machine names found : " & Machines.Count)

'Get the correct machine name

counter = 0

Dim MachineObj 'As COMAdminCatalogObject

For Each MachineObj in Machines

If MachineObj.Name=sMachine Then

MsgBox(MachineObj.Name)

Exit For

End If

counter = counter +1

Next

'Delete the machine name

If counter < machines.count Then

Dim answer

answer = Msgbox("Are you sure you want to delete: " & sMachine, vbYesNo, "Confirm Deletion?")

If answer=vbYes Then

Machines.Remove(counter)

Machines.SaveChanges

End If

Else

Msgbox "'" & sMachine & "' not found in the COM+ catalog.", vbOkOnly,"Machine Not Found"

End If

Thanks for your time,

Gangadharan Prashanth

Share this post :


Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Stuff like this happens all over Windows... Ever heard the word "asynchronous"?

  • WOW!  I looked high and low for a solution to this problem.  THANK YOU THANK YOU THANK YOU!

    I'm adding this to our team's knowledge base.

  • Here's a simple powershell version that removes all servers that are unreachable:

    $error.clear()

    $catalog=New-Object -ComObject "COMAdmin.COMAdminCatalog"

    $Machines = $catalog.GetCollection("ComputerList")
    $Machines.Populate()

    $counter=0

    for($counter=0;$counter -lt $Machines.count;$counter++){
    $machineObj = $machines.Item($counter)
    if($machineObj.Name -ne "My Computer"){
    $servername = $machineObj.name
    if(!(Test-Connection -Quiet $servername)){
    write-host "$servername is unpingable, removing from Component Services Locally"
    $Machines.Remove($counter)
    }
    }
    }
    $Machines.SaveChanges() | Out-Null