简体   繁体   English

如何检查是否已安装IIS 6管理兼容性功能?

[英]How do I check whether IIS 6 Management Compatibility feature has been installed?

使用VB.NET,C#或VBScript,如何检查运行IIS 7.x的计算机上是否已安装IIS 6管理兼容性功能及其子功能?

I performed some tests using a trial copy of Registry Workshop (the Compare Registries function) and found the following: 我使用Registry Workshop的试用版(比较注册表功能)进行了一些测试,发现了以下内容:

If IIS 7.x is installed, the following Registry key contains information about the installed subcomponents: 如果安装了IIS 7.x,则以下注册表项包含有关已安装的子组件的信息:

HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\InetStp\\Components HKEY_LOCAL_MACHINE \\ SOFTWARE \\微软\\ InetStp \\组件

Each installed feature is represented with a value of DWORD 0x00000001. 每个已安装的功能都使用值DWORD 0x00000001表示。 If a feature is not installed, the value is missing. 如果未安装功能,则缺少该值。

For the Web Management Tools, the value names are as follows: 对于Web管理工具,值名称如下:

Web Management Tools
  IIS 6 Management Compatibility
    IIS 6 Management Console                              (LegacySnapin)
    IIS 6 Scripting Tools                                 (LegacyScripts)
    IIS 6 WMI Compatibility                               (WMICompatibility)
    IIS Metabase and IIS 6 configuration compatibility    (Metabase + ADSICompatibility)

  IIS Management Console                                  (ManagementConsole)
  IIS Management Scripts and Tools                        (ManagementScriptingTools)
  IIS Management Service                                  (AdminService)

Note that these component names came from a Windows 7 installation and might differ slightly from those of Windows Server 2008, though the Registry keys should be the same. 请注意,这些组件名称来自Windows 7安装,可能与Windows Server 2008略有不同,但注册表项应该相同。

Some of this is mentioned in a note to this article: Using Managed Code to Detect if IIS is Installed and ASP/ASP.NET is Registered 本文的注释中提到了其中的一些内容: 使用托管代码检测是否安装了IIS并且ASP / ASP.NET已注册

A list of these and other subcomponents can be found here: Discover Installed Components 可以在此处找到这些和其他子组件的列表: 发现已安装的组件

Update: 更新:

Some core functions from the final code. 最终代码中的一些核心功能。 This is not the complete code but should be enough for anyone who spends the time looking up the component names for the various IIS versions: 这不是完整的代码,但对于那些花时间查找各种IIS版本的组件名称的人来说应该足够了:

Function IsIISComponentInstalled(ByVal ComponentName)
    Dim result
    Dim intProcessorArchitecture
    intProcessorArchitecture = GetProcessorArchitectureIIS()
    If intProcessorArchitecture = 64 Then
        '64-bit system
        On Error Resume Next
        Err.Clear
        result = RegReadDWORD(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\InetStp\Components", ComponentName, 64)
        If Err.Number <> 0 Then
            Err.Clear
            IsIISComponentInstalled = False
        Else
            If result = 1 Then
                IsIISComponentInstalled = True
            Else
                IsIISComponentInstalled = False
            End If
        End If
    Else
        '32-bit system
        If RegReadStringIIS("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components\" & ComponentName) = "1" Then
            IsIISComponentInstalled = True
        Else
            IsIISComponentInstalled = False
        End If
    End If

End Function

Function GetProcessorArchitectureIIS()
    Dim strProcessorArchitecture
    Dim oShell

    Set oShell = CreateObject("Wscript.Shell")
    strProcessorArchitecture = oShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")

    If strProcessorArchitecture = "x86" Then
        GetProcessorArchitectureIIS = 32
    Else
        If strProcessorArchitecture = "AMD64" Then
            GetProcessorArchitectureIIS = 64
        Else
            GetProcessorArchitectureIIS = 0
        End If
    End If

End Function

Function RegReadStringIIS(sRegValue)
    Set oShell = CreateObject("WScript.Shell")
    On Error Resume Next
    RegReadStringIIS = oShell.RegRead(sRegValue)
    If Err Then
        RegReadStringIIS = ""
        Err.clear
    End If
    If VarType(RegReadStringIIS) < vbArray Then
        If RegReadStringIIS = sRegValue Then
            RegReadStringIIS = ""
        End If
    End If
    On Error Goto 0
End Function

'-------------------------------------------------------------------
' Reads a REG_SZ value from the local computer's registry using WMI.
' Parameters:
'   RootKey - The registry hive (see http://msdn.microsoft.com/en-us/library/aa390788(VS.85).aspx for a list of possible values).
'   Key - The key that contains the desired value.
'   Value - The value that you want to get.
'   RegType - The registry bitness: 32 or 64.
'
'References:
'   http://stackoverflow.com/questions/1229760/how-do-i-read-64-bit-registry-values-from-vbscript-running-as-a-an-msi-post-inst
'   http://msdn.microsoft.com/en-us/library/aa393067(VS.85).aspx
'   http://msdn.microsoft.com/en-us/library/windows/desktop/aa390445(v=VS.85).aspx
'
Function RegReadDWORD(RootKey, Key, Value, RegType)
    Dim oCtx, oLocator, oReg, oInParams, oOutParams
    Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
    oCtx.Add "__ProviderArchitecture", RegType
    Set oLocator = CreateObject("Wbemscripting.SWbemLocator")
    Set oReg = oLocator.ConnectServer("", "root\default", "", "", , , , oCtx).Get("StdRegProv")
    Set oInParams = oReg.Methods_("GetDWORDValue").InParameters
    oInParams.hDefKey = RootKey
    oInParams.sSubKeyName = Key
    oInParams.sValueName = Value
    Set oOutParams = oReg.ExecMethod_("GetDWORDValue", oInParams, , oCtx)
    RegReadDWORD = oOutParams.uValue
End Function

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM