如何通过 .NET 中的代码以编程方式重新启动在远程服务器上运行的 COM+ 应用程序?
问问题
5334 次
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 回答