如何以编程方式从.NET中的代码重新启动远程服务器上运行的COM +应用程序?
答案 0 :(得分:7)
您必须通过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,这很奇怪并且有点混乱。如果有人知道它是如何发生的,请发表评论。