是否有任何方式以编程方式获取有关启动DCOM应用程序标识的信息。请看附图来理解我的意思。

我试着用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;但是"RunAsUser“属性是空的。也尝试过Interop.COMAdmin
COMAdmin.COMAdminCatalogClass catalog = (COMAdmin.COMAdminCatalogClass)new COMAdmin.COMAdminCatalog();
(COMAdmin.COMAdminCatalogCollection)catalog.GetCollection("Applications")通过这种方式,我成功地获得了MMC“组件服务”管理单元中"COM+应用程序“节点下列出的应用程序:

我是COM,DCOM,COM+的新手,我肯定我错过了一些重要的东西。
过了一会儿,我发现了为什么我以前在第一种方法(ManagementObject)中获得NULL。你将收到:
但是,我仍然需要一种方法来更改MMC中的、微软、PowerPoint、幻灯片、、、DCOM、Config节点等项目的标识。
发布于 2017-06-09 14:41:21
在DCOM配置中,如果您使用特定用户作为标识,并且希望通过代码更新密码,则需要在(LSA)中更新密码。这在Windows调用中是可能的。MS有一个名为dcomperm的实用程序的示例代码,您可以看到它们是如何在C++中实现的。您可以在C#中打同样的电话。请参见SetRunAsPassword方法这里。他们使用LsaOpenPolicy方法获取策略的句柄,并调用LsaStorePrivateData更新密码。然后,他们添加了“作为批处理作业登录”对帐户的访问权限(但如果您只更改密码,则不需要这样做)。
这示例代码在pinvoke.net上看起来像是在进行必要的调用,除了关于将登录授予批处理作业权限的可选部分之外。注意,LSA中的"key“是SCM:{GUID-of DCOM-object}示例: SCM:{00000000-0000-0000-0000-000000000000}的格式。
哦,顺便提一下,如果您想更改RunAs用户本身(即用户名),您还需要在windows注册表中直接更新它(AFAIK,这是唯一的方法)。DCOM条目存储在HKLM\SOFTWARE\Classes\AppID下。您可以使用WMI完成这一任务,也可以只使用.NET中的Registry。
发布于 2020-04-28 11:18:25
这很简单,您可以从
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{048EB43E-2059-422F-95E0-557DA96038AF}使用
(RegistryKey dcomPPTIdentity = Registry.LocalMachine.OpenSubKey("Software\\Classes\\AppID\\{048EB43E-2059-422F-95E0-557DA96038AF}"))
{
if (dcomPPTIdentity != null)
{
Registry.SetValue(dcomPPTIdentity.ToString(), "RunAs", "userName");
}
}发布于 2013-12-08 11:26:03
我正在成功地使用COMAdmin动态链接库。试着做这样的事情:
COMAdminCatalog catalog = new COMAdminCatalog();
COMAdminCatalogCollection applications = catalog.GetCollection("Applications");
applications.Populate();
for (int i = 0; i < applications.Count; i++)
{
COMAdminCatalogObject application = COMAppCollectionInUse.Item[i];
if (application.Name == "Your COM+ application name")
{
application.Value["Identity"] = "nt authority\\localservice"; // for example
}
}https://stackoverflow.com/questions/20426043
复制相似问题