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

最佳答案

您必须通过COM互操作使用ComAdmin API。

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

COMAdmin.COMAdminCatalog catalog = new COMAdmin.COMAdminCatalogClass();
catalog.Connect(servername);
catalog.ShutdownApplication(AppNameOrAppID);


您可以在MSDN here中找到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,这很奇怪,也有些令人困惑。如果有人知道如何发生,请发表评论。

10-08 14:49