如何以编程方式从.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,这很奇怪,也有些令人困惑。如果有人知道如何发生,请发表评论。