【问题标题】:How do I restart a COM+ application on a remote server from .NET?如何从 .NET 重新启动远程服务器上的 COM+ 应用程序?
【发布时间】:2009-06-05 08:30:52
【问题描述】:

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

【问题讨论】:

    标签: .net com comadmin


    【解决方案1】:

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

    【讨论】:

    • 优秀的答案。感谢您为我提供开始使用 tihs 所需的所有信息。
    • 它与应用于 COM 互操作接口的 CoClass 属性有关。早在 2009 年,我就发现了该属性的一些非预期用途,并在 stackoverflow.com/q/1303717/151249 上发布了一个关于它的问题@有关详细信息,请参阅 Marc Gravell 答案上的链接
    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 2021-06-10
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    相关资源
    最近更新 更多