3

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

4

1 回答 1

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,这很奇怪,也有点令人困惑。如果有人知道它是如何发生的,请发表评论。

于 2009-06-05T09:42:05.503 回答