C#如何用代码检测IIS是否已经启用“IIS6元数据库兼容性”
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
使用 VB.NET、C# 或 VBScript,如何检查 IIS 6 管理兼容性功能及其子功能是否已安装在运行 IIS 7.x 的计算机上? 解决方案 我使用 Registry Workshop 的试用版(比较注册表功能)进行了一些测试,结果如下: 如果安装了 IIS 7.x,以下注册表项包含有关已安装子组件的信息: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components 每个已安装的功能都用 DWORD 0x00000001 的值表示。如果未安装功能,则缺少该值。 对于 Web 管理工具,值名称如下: Web Management Tools IIS 6 Management Compatibility IIS 6 Management Console (LegacySnapin) //IIS6 管理控制台 IIS 6 Scripting Tools (LegacyScripts) //IIS6 脚本工具 IIS 6 WMI Compatibility (WMICompatibility) //IIS6 WMI 兼容性 IIS Metabase and IIS 6 configuration
compatibility (Metabase) //IIS6 元数据库兼容性
IIS Management Console (ManagementConsole) //IIS 管理控制台 IIS Management Scripts and Tools
(ManagementScriptingTools) //IIS 管理工具和脚本 IIS Management Service (AdminService) //IIS
管理服务
请注意,这些组件名称来自 Windows 7 安装,可能与 Windows Server 2008 的组件名称略有不同,但注册表项应该相同。 本文的注释中提到了其中的一些内容: 使用托管代码检测是否已安装 IIS 并已注册 ASP/ASP.NET 可以在此处找到这些和其他子组件的列表: 发现已安装的组件 更新: 最终代码中的一些核心功能。这不是完整的代码,但对于花时间查找各种 IIS 版本的组件名称的人来说应该足够了: Function IsIISComponentInstalled(ByVal ComponentName)Dim resultDim intProcessorArchitectureintProcessorArchitecture = GetProcessorArchitectureIIS()If intProcessorArchitecture = 64 Then'64-bit systemOn Error Resume NextErr.Clearresult = RegReadDWORD(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\InetStp\Components", ComponentName, 64)If Err.Number <> 0 ThenErr.ClearIsIISComponentInstalled = FalseElseIf result = 1 ThenIsIISComponentInstalled = TrueElseIsIISComponentInstalled = FalseEnd IfEnd IfElse'32-bit systemIf RegReadStringIIS("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Components\" & ComponentName) = "1" ThenIsIISComponentInstalled = TrueElseIsIISComponentInstalled = FalseEnd IfEnd IfEnd FunctionFunction GetProcessorArchitectureIIS()Dim strProcessorArchitectureDim oShellSet oShell = CreateObject("Wscript.Shell")strProcessorArchitecture = oShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")If strProcessorArchitecture = "x86" ThenGetProcessorArchitectureIIS = 32ElseIf strProcessorArchitecture = "AMD64" ThenGetProcessorArchitectureIIS = 64ElseGetProcessorArchitectureIIS = 0End IfEnd IfEnd FunctionFunction RegReadStringIIS(sRegValue)Set oShell = CreateObject("WScript.Shell")On Error Resume NextRegReadStringIIS = oShell.RegRead(sRegValue)If Err ThenRegReadStringIIS = ""Err.clearEnd IfIf VarType(RegReadStringIIS) < vbArray ThenIf RegReadStringIIS = sRegValue ThenRegReadStringIIS = ""End IfEnd IfOn Error Goto 0End 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, oOutParamsSet oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")oCtx.Add "__ProviderArchitecture", RegTypeSet oLocator = CreateObject("Wbemscripting.SWbemLocator")Set oReg = oLocator.ConnectServer("", "root\default", "", "", , , , oCtx).Get("StdRegProv")Set oInParams = oReg.Methods_("GetDWORDValue").InParametersoInParams.hDefKey = RootKeyoInParams.sSubKeyName = KeyoInParams.sValueName = ValueSet oOutParams = oReg.ExecMethod_("GetDWORDValue", oInParams, , oCtx)RegReadDWORD = oOutParams.uValueEnd Function
该文章在 2021/6/15 9:31:17 编辑过 |
关键字查询
相关文章
正在查询... |