如何从 .NET 远程重启 COM+ 应用程序?

3
如何在.NET代码中以编程方式重新启动在远程服务器上运行的COM+应用程序?
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7

您需要通过COM互操作使用ComAdmin API。

将一个引用放在Windows\System32\Com\ComAdmin.dll上,然后:

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalogClass();
catalog.Connect(servername);
catalog.ShutdownApplication(AppNameOrAppID);
您可以在MSDN这里找到ComAdmin参考。

它是一个COM API,有点奇怪。例如,您无法实例化COMAdminCatalog,因为它是一个接口而不是类,所以必须使用COMAdminCatalogClass来创建新实例。使用Visual Studio的对象浏览器在COMAdmin命名空间中查找这些陷阱。

编辑(一些注释):

实际上,您可以编写

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalog();

而它确实起作用了,这令人惊讶,因为COMAdminCatalog是一个接口。但这一定是VStudio或C#编译器的技巧,因为生成的程序集包含以下IL代码:

newobj instance void [Interop.COMAdmin]COMAdmin.COMAdminCatalogClass::.ctor()

所以它不知怎么地发现必须实例化COMAdminCatalogClass,这很奇怪,也有点令人困惑。如果有人知道它是如何发生的,请评论。


非常好的回答。感谢您提供了我开始使用它所需的所有信息。 - Daniel Fortunov
2
这与应用于COM互操作接口的CoClass属性有关。早在2009年,我发现了一些意外使用该属性的方法,并在https://dev59.com/H0jSa4cB1Zd3GeqPJ_nW上发布了一个问题。有关详细信息,请参见Marc Gravell答案中的链接。 - Alfred Myers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,