c# - requiere - ¿Cómo compruebo si se ha instalado la característica de compatibilidad de administración de IIS 6?
instalar iis en windows 10 (1)
Realicé algunas pruebas usando una copia de prueba de Registry Workshop (la función Compare Registries) y encontré lo siguiente:
Si IIS 7.x está instalado, la siguiente clave del Registro contiene información sobre los subcomponentes instalados:
HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / InetStp / Components
Cada característica instalada se representa con un valor de DWORD 0x00000001. Si una característica no está instalada, el valor falta.
Para las herramientas de administración web, los nombres de los valores son los siguientes:
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)
Tenga en cuenta que estos nombres de componentes provienen de una instalación de Windows 7 y pueden diferir ligeramente de los de Windows Server 2008, aunque las claves del Registro deberían ser las mismas.
Parte de esto se menciona en una nota de este artículo: Uso de código administrado para detectar si IIS está instalado y ASP / ASP.NET está registrado.
Puede encontrar una lista de estos y otros subcomponentes aquí: Descubrir componentes instalados
Actualizar:
Algunas funciones centrales del código final. Este no es el código completo, pero debería ser suficiente para cualquiera que dedique tiempo a buscar los nombres de los componentes para las distintas versiones de 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
Usando VB.NET, C # o VBScript, ¿cómo puedo verificar si la característica de compatibilidad de administración de IIS 6 y sus subfunciones han sido instaladas en una máquina que ejecuta IIS 7.x?