C#操作服务器(1):C#检测是否安装IIS 、Aspnet以及Aspnet是否注册到IIS

作者:陆金龙    发表时间:2015-08-08 11:56   


本文系参考项目MSNET20的Campari.Software.Core库整理而来。

源码下载地址:http://www.51aspx.com/Code/MSNET20。

using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;

namespace Kinglong.App.Tools
{
    public class IISDetect
    {
        const string IISStpRegKeyName = "Software\\Microsoft\\InetStp";
        const string IISStpRegKeyValue = "MajorVersion";

        const string Netfx30StpRegKeyName = "Software\\Microsoft\\NET Framework Setup\\NDP\\v3.0\\Setup";
        const string Netfx35StpRegKeyName = "Software\\Microsoft\\NET Framework Setup\\NDP\\v3.5";
        const string Netfx40StpRegKeyName = "Software\\Microsoft\\NET Framework Setup\\NDP\\v4\\Client";
        const string NetfxPlusRegValueName = "Install";
        const string Netfx30PlusRegValueName = "InstallSuccess";

        const string Netfx20RegKeyName = "Software\\Microsoft\\ASP.NET\\2.0.50727.0";
        const string Netfx40RegKeyName = "Software\\Microsoft\\ASP.NET\\4.0.30319.0";
        const string NetRegKeyValue = "DllFullPath";

        public static bool IsIIS6Installed()
        {
            bool found = false;
            int regValue = 0;

            if (GetRegistryValue(RegistryHive.LocalMachine, IISStpRegKeyName, IISStpRegKeyValue, RegistryValueKind.DWord, out regValue))
            {
                if (regValue == 6)
                {
                    found = true;
                }
            }
            return found;
        }
        public static bool IsIIS7Installed()
        {
            bool found = false;
            int regValue = 0;

            if (GetRegistryValue(RegistryHive.LocalMachine, IISStpRegKeyName, IISStpRegKeyValue, RegistryValueKind.DWord, out regValue))
            {
                if (regValue == 7)
                {
                    found = true;
                }
            }

            return found;
        }


        public static bool IsNetfx30Installed()
        {
            bool found = false;
            int regValue = 0;

            if (GetRegistryValue(RegistryHive.LocalMachine, Netfx30StpRegKeyName, Netfx30PlusRegValueName, RegistryValueKind.DWord, out regValue))
            {
                if (regValue == 1)
                {
                    found = true;
                }
            }

            return found;
        }
        public static bool IsNetfx35Installed()
        {
            bool found = false;
            int regValue = 0;

            if (GetRegistryValue(RegistryHive.LocalMachine, Netfx35StpRegKeyName, NetfxPlusRegValueName, RegistryValueKind.DWord, out regValue))
            {
                if (regValue == 1)
                {
                    found = true;
                }
            }

            return found;
        }
        public static bool IsNetfx40Installed()
        {
            bool found = false;
            int regValue = 0;

            if (GetRegistryValue(RegistryHive.LocalMachine, Netfx40StpRegKeyName, NetfxPlusRegValueName, RegistryValueKind.DWord, out regValue))
            {
                if (regValue == 1)
                {
                    found = true;
                }
            }

            return found;
        }


        public static bool IsAspNet20Registered()
        {
            string regValue = string.Empty;
            return (GetRegistryValue(RegistryHive.LocalMachine, Netfx20RegKeyName, NetRegKeyValue, RegistryValueKind.String, out regValue));
        }
        public static bool IsAspNet40Registered()
        {
            string regValue = string.Empty;
            return (GetRegistryValue(RegistryHive.LocalMachine, Netfx40RegKeyName, NetRegKeyValue, RegistryValueKind.String, out regValue));
        }

        private static bool GetRegistryValue(RegistryHive hive, string key, string value, RegistryValueKind kind, out T data)
        {
            bool success = false;
            data = default(T);

            using (RegistryKey baseKey = RegistryKey.OpenRemoteBaseKey(hive, String.Empty))
            {
                if (baseKey != null)
                {
                    using (RegistryKey registryKey = baseKey.OpenSubKey(key, RegistryKeyPermissionCheck.ReadSubTree))
                    {
                        if (registryKey != null)
                        {
                            try
                            {
                                // If the key was opened, try to retrieve the value.
                                RegistryValueKind kindFound = registryKey.GetValueKind(value);
                                if (kindFound == kind)
                                {
                                    object regValue = registryKey.GetValue(value, null);
                                    if (regValue != null)
                                    {
                                        data = (T)Convert.ChangeType(regValue, typeof(T), CultureInfo.InvariantCulture);
                                        success = true;
                                    }
                                }
                            }
                            catch (IOException)
                            {

                            }
                        }
                    }
                }
            }
            return success;
        }


    }
}