How to change DCOM config identity programmatically

Viewed 5568

Is there any way to get the information about Launching identity of DCOM application programmatically. See the picture attached to understand what i mean.

Screenshot with application properties from DCOM Config

I tried to use WMI

ManagementObjectSearcher s = new ManagementObjectSearcher(new ManagementScope(@"\\.\root\cimv2"), new ObjectQuery(
                "select * from Win32_DCOMApplicationSetting  where AppID='{048EB43E-2059-422F-95E0-557DA96038AF}'"))
ManagementObjectCollection dcomSett = s.Get();
var value = dcomSett.Cast<ManagementObject>().ToArray()
             [0].Properties["RunAsUser"].Value;

but "RunAsUser" property was empty. Also tried Interop.COMAdmin

COMAdmin.COMAdminCatalogClass catalog = (COMAdmin.COMAdminCatalogClass)new COMAdmin.COMAdminCatalog();
(COMAdmin.COMAdminCatalogCollection)catalog.GetCollection("Applications")

in this way i managed to get applications which are listed under the "COM+ Applications" node in the "Component Services" snap-in of MMC:

COM+ applications

I'm new in COM, DCOM, COM+ stuff and sure that i missed something important.

After a while i found out why i used to get NULL in the first approach (ManagementObject). You will receive:

  • NULL if identity is currently set to The launching user
  • "Interactive User" in case of "The interactive user"
  • some string with username in case of third option (see the first picture)

But still i need a way to change identity for items like Microsoft PowerPoint Slide under DCOM Config node in MMC.

4 Answers

This is very simple , you can get APPId from

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{048EB43E-2059-422F-95E0-557DA96038AF}

using

(RegistryKey dcomPPTIdentity = Registry.LocalMachine.OpenSubKey("Software\\Classes\\AppID\\{048EB43E-2059-422F-95E0-557DA96038AF}"))
{
    if (dcomPPTIdentity != null)
    {
         Registry.SetValue(dcomPPTIdentity.ToString(), "RunAs", "userName");
    }
}
Related