【问题标题】:How to programmatically check WCF Http/Non-Http Activation components?如何以编程方式检查 WCF Http/Non-Http 激活组件?
【发布时间】:2026-01-29 18:50:02
【问题描述】:

我需要在我的产品安装过程中检测是否安装了 WCF Http/Non-Http 激活组件。我该怎么做?

谢谢。

【问题讨论】:

    标签: .net windows wcf wix


    【解决方案1】:

    对于 IIS7,检查以下注册表项:

    HKEY_LOCAL_MACHINE\Software\Microsoft\InetStp\Components\

    对于以下组件:

    • 流程模型 - ProcessModel
    • .NET 环境 - NetFxEnvironment
    • 配置 API - WASConfigurationAPI

    从此页面:http://learn.iis.net/page.aspx/135/discover-installed-components/

    更新:由于即使未安装组件,上述情况也是如此,请尝试从命令行运行此命令:

    sc查询nettcpactivator

    如果服务已停止或不存在,则可能未安装 WCF 非 HTTP 激活组件。要安装它们,请运行以下命令:

    pkgmgr /iu: WCF-NonHTTP-Activation

    来源:http://blogs.msdn.com/b/drnick/archive/2010/05/11/debugging-a-missing-hostedtransportconfiguration-type.aspx

    【讨论】:

    • 不幸的是,这没有帮助。这三个值存在于注册表中(并且等于 1),与安装的 http/非 http 激活组件无关。 (Windows Server 2008R2)
    • 检查一下“Windows Process Activation Service”是否存在,状态是否为Started?
    • 谢谢,我会试着写下结果。 )
    • 好!这正是我需要的!谢谢你,达雷尔!
    【解决方案2】:

    对于带有 Windows Server 2012(可能还有 Windows 8)的 IIS8,您可以检查此注册表项(对于 .NET 4.5)

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ServerManager\ServicingStorage\ServerComponentCache\NET-WCF-HTTP-Activation45\InstallState

    0 表示未安装,1 表示已安装。

    【讨论】:

    • 密钥存在于 2012 年,但不适用于 Windows 8
    【解决方案3】:

    您还可以使用 PowerShell 启用 WCF Http/Non-Http 激活组件:

    Import-Module ServerManager
    Add-WindowsFeature NET-HTTP-Activation,NET-Non-HTTP-Activ
    

    这样您就不必弄乱 Windows 注册表。有关使用 PowerShell 添加 Windows 功能的更多信息:http://technet.microsoft.com/en-us/library/cc732263.aspx#BKMK_powershell

    【讨论】:

      【解决方案4】:

      您可能应该使用 Get-WindowsFeature powershell commandlet。您可以通过调用来检查 Server 2012 上是否存在 .NET Framework 4.5 WCF Services for HTTP Activation:

      $wcfActivationFeature = Get-WindowsFeature -name NET-WCF-HTTP-Activation45
      $wcfActivationFeature.Installed
      

      【讨论】:

        【解决方案5】:

        HTTP 激活的注册表项是:

        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup\Windows Communication Foundation\HTTPActivation

        ,对于non-HTTP,激活是检查服务NetTcpActivationNetPipeActivator 是否存在于机器上并且正在运行。

        【讨论】: