LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【C#/C++】使用托管代码检测IIS是否安装并注册了ASP/ASP.NET等服务

admin
2021年6月11日 17:48 本文热度 3229

介绍

我之前关于使用托管代码检测安装了哪些 .NET Framework 版本和服务包的文章生成了一些与检测 Internet 信息服务 (IIS) 是否已安装以及 ASP 或 ASP.NET 是否已注册相关的后续问题。

由于这是一个托管代码解决方案,它确实需要已经安装了 .NET Framework 的一个版本,因此不能保证此类作为安装过程的一部分工作。如果您需要在安装过程中可靠地执行此操作,则需要考虑使用非托管 C++ 执行相同的工作。

背景

确定是否安装了特定版本的 Internet 信息服务的正确方法是在注册表中查找以下项:

HKLM\Software\Microsoft\InetStp\MajorVersion
HKLM\Software\Microsoft\InetStp\
VersionString

这是一个 DWORD 值,指示安装的 IIS 版本(如果存在)。

主要版本IIS版本描述
4IIS 4在 Windows NT 4 的 NT Option Pack 中提供
5IIS 5在 Windows 2000 Server 和 Windows XP Professional 中提供
6IIS 6在 Windows Server 2003 中提供
7IIS 7在 Windows Vista 中提供

对于 IIS 5,您可以使用 MinorVersion DWORD 值来确定您是在 Windows 2000 Server 还是 Windows XP Professional 上运行。如果 MinorVersion 为 1,则您在 Windows XP Professional 上运行。

检测 IIS 子组件

有时,仅仅知道是否安装了 IIS 是不够的,您需要确定是否还安装了特定的子组件。同样,我们可以转向注册表以获取此信息。所有子组件信息都包含在以下注册表项中:

HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\Oc Manager\Subcomponents

此键下的所有值都是 DWORD,因此如果值为 1,则安装该组件。

IIS 子组件注册表值
IIS常用文件iis_common
用于 IIS 的 Active Server Pages (ASP)iis_asp
文件传输协议 (FTP) 服务iis_ftp
IIS 管理器(Microsoft 管理控制台 [MMC] 管理单元)iis_inetmgr
互联网数据连接器iis_internetdataconnector
网络新闻传输协议 (NNTP) 服务iis_nntp
服务器端包含iis_serversideincludes
简单邮件传输协议 (SMTP) 服务iis_smtp
Web 分布式创作和版本控制 (WebDAV) 发布iis_webdav
万维网 (WWW) 服务iis_www
远程管理 (HTML)sakit_web

用于后台智能传输服务 (BITS) 服务器扩展的Internet 服务器应用程序编程接口 (ISAPI)
BitsServerExtensionsISAPI
后台智能传输服务 (BITS)
服务器扩展管理单元
位服务器扩展管理器
FrontPage 服务器扩展fp_extensions
网络印刷网印
用于
通过 Web托管终端服务客户端连接的ActiveX 控件和示例页面
客户端

检测是否已注册 ASP 或 ASP.NET

为了检测 ASP 是否在 IIS 中注册,您可以简单地查看是否安装了 ASP 组件 (iis_asp)。但是,对于 ASP.NET,由于有不同版本的 ASP.NET,它变得有点复杂。我们还可以通过查看以下键来使用注册表获取此信息:

框架版本注册表项
ASP.NET v1.1HKLM\Software\Microsoft\ASP.NET\1.1.4322.0
ASP.NET v2.0HKLM\Software\Microsoft\ASP.NET\2.0.50727.0

如果该键存在,则该版本的 ASP.NET 已向 IIS 注册。

使用代码

为了整合检查所有各种注册表项并帮助隔离 .NET Framework 和 IIS 的未来版本的更改,InternetInformationServicesDetection创建该类。这个类公开了以下public方法:

  • C#
    public  static  bool IsInstalled(InternetInformationServicesVersion iisVersion)
  • C#
    public  static  bool IIsInstalled(InternetInformationServicesComponent subcomponent)
  • C#
    public  static  bool IsAspRegistered()
  • C#
    public  static  bool IsAspNetRegistered(FrameworkVersion frameworkVersion)

正如你所看到的,这些函数使用FrameworkVersionInternetInformationServicesVersionInternetInformationServicesComponent枚举。这些枚举具有以下定义:

C#
/// <span class="code-SummaryComment"><summary></span>
/// Specifies the .NET Framework versions
/// <span class="code-SummaryComment"></summary></span>
public enum FrameworkVersion
{
/// <span class="code-SummaryComment"><summary></span>
 /// .NET Framework 1.0
 /// <span class="code-SummaryComment"></summary></span>
 Fx10,
/// <span class="code-SummaryComment"><summary></span>
 /// .NET Framework 1.1
 /// <span class="code-SummaryComment"></summary></span>
 Fx11,
/// <span class="code-SummaryComment"><summary></span>
 /// .NET Framework 2.0
 /// <span class="code-SummaryComment"></summary></span>
 Fx20,
/// <span class="code-SummaryComment"><summary></span>
 /// .NET Framework 3.0
 /// <span class="code-SummaryComment"></summary></span>
 Fx30,
/// <span class="code-SummaryComment"><summary></span>
 /// .NET Framework 3.5 (Orcas)
 /// <span class="code-SummaryComment"></summary></span>
 Fx35,
}
/// <span class="code-SummaryComment"><summary></span>
/// Specifies the Internet Information Services (IIS) versions
/// <span class="code-SummaryComment"></summary></span>
public enum InternetInformationServicesVersion
{
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Information Services 4
 /// <span class="code-SummaryComment"></summary></span>
 /// <span class="code-SummaryComment"><remarks>Shipped in NT Option Pack for Windows NT 4</remarks></span>
 IIS4,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Information Services 5
 /// <span class="code-SummaryComment"></summary></span>
 /// <span class="code-SummaryComment"><remarks>Shipped in Windows 2000 Server and Windows XP Professional</remarks></span>
 IIS5,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Information Services 6
 /// <span class="code-SummaryComment"></summary></span>
 /// <span class="code-SummaryComment"><remarks>Shipped in Windows Server 2003</remarks></span>
 IIS6,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Information Services 7
 /// <span class="code-SummaryComment"></summary></span>
 /// <span class="code-SummaryComment"><remarks>Shipped in Windows Vista</remarks></span>
 IIS7,
}
/// <span class="code-SummaryComment"><summary></span>
/// Specifies the Internet Information Services (IIS) versions
/// <span class="code-SummaryComment"></summary></span>
public enum InternetInformationServicesComponent
{
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Information Services Common Files
 /// <span class="code-SummaryComment"></summary></span>
 Common,
/// <span class="code-SummaryComment"><summary></span>
 /// Active Server Pages (ASP) for Internet Information Services
 /// <span class="code-SummaryComment"></summary></span>
 ASP,
/// <span class="code-SummaryComment"><summary></span>
 /// File Transfer Protocol (FTP) service
 /// <span class="code-SummaryComment"></summary></span>
 FTP,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Information Services Manager
 /// <span class="code-SummaryComment"></summary></span>
 InetMgr,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Data Connector
 /// <span class="code-SummaryComment"></summary></span>
 InternetDataConnector,
/// <span class="code-SummaryComment"><summary></span>
 /// Network News Transfer Protocol (NNTP) service
 /// <span class="code-SummaryComment"></summary></span>
 NNTP,
/// <span class="code-SummaryComment"><summary></span>
 /// Server-Side Includes
 /// <span class="code-SummaryComment"></summary></span>
 ServerSideIncludes,
/// <span class="code-SummaryComment"><summary></span>
 /// Simple Mail Transfer Protocol (SMTP) service
 /// <span class="code-SummaryComment"></summary></span>
 SMTP,
/// <span class="code-SummaryComment"><summary></span>
 /// Web Distributed Authoring and Versioning (WebDAV) publishing
 /// <span class="code-SummaryComment"></summary></span>
 WebDAV,
/// <span class="code-SummaryComment"><summary></span>
 /// World Wide Web (WWW) service
 /// <span class="code-SummaryComment"></summary></span>
 WWW,
/// <span class="code-SummaryComment"><summary></span>
 /// Remote administration (HTML)
 /// <span class="code-SummaryComment"></summary></span>
 RemoteAdmin,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet Server Application Programming Interface (ISAPI) for
 /// Background Intelligent Transfer Service (BITS) server extensions
 /// <span class="code-SummaryComment"></summary></span>
 BitsISAPI,
/// <span class="code-SummaryComment"><summary></span>
 /// Background Intelligent Transfer Service (BITS) server extensions
 /// <span class="code-SummaryComment"></summary></span>
 Bits,
/// <span class="code-SummaryComment"><summary></span>
 /// FrontPage server extensions
 /// <span class="code-SummaryComment"></summary></span>
 FrontPageExtensions,
/// <span class="code-SummaryComment"><summary></span>
 /// Internet printing
 /// <span class="code-SummaryComment"></summary></span>
 InternetPrinting,
/// <span class="code-SummaryComment"><summary></span>
 /// ActiveX control and sample pages for hosting Terminal Services
 /// client connections over the web
 /// <span class="code-SummaryComment"></summary></span>
 TSWebClient,
}

C# 中的完整示例如下所示:

C#
bool iis4Installed =
InternetInformationServicesDetection.IsInstalled
(InternetInformationServicesVersion.IIS4);
bool iis5Installed =
InternetInformationServicesDetection.IsInstalled
(InternetInformationServicesVersion.IIS5);
bool iis6Installed =
InternetInformationServicesDetection.IsInstalled
(InternetInformationServicesVersion.IIS6);
bool iis7Installed =
InternetInformationServicesDetection.IsInstalled
(InternetInformationServicesVersion.IIS7);
Console.WriteLine("IIS 4 installed? {0}", iis4Installed);
Console.WriteLine("IIS 5 installed? {0}", iis5Installed);
Console.WriteLine("IIS 6 installed? {0}", iis6Installed);
Console.WriteLine("IIS 7 installed? {0}", iis7Installed);
if (iis4Installed || iis5Installed || iis6Installed || iis7Installed)
{
Console.WriteLine("ASP Registered? {0}",
InternetInformationServicesDetection.IsAspRegistered());
Console.WriteLine("ASP.NET 1.0 Registered? {0}",
InternetInformationServicesDetection.IsAspNetRegistered(FrameworkVersion.Fx10));
Console.WriteLine("ASP.NET 1.1 Registered? {0}",
InternetInformationServicesDetection.IsAspNetRegistered(FrameworkVersion.Fx11));
Console.WriteLine("ASP.NET 2.0 Registered? {0}",
InternetInformationServicesDetection.IsAspNetRegistered(FrameworkVersion.Fx20));
// These really don't exist, they are actually the .NET 2.0 version of ASP.NET.
Console.WriteLine("ASP.NET 3.0 Registered? {0}",
InternetInformationServicesDetection.IsAspNetRegistered(FrameworkVersion.Fx30));
Console.WriteLine("ASP.NET 3.5 Registered? {0}",
InternetInformationServicesDetection.IsAspNetRegistered(FrameworkVersion.Fx35));
}
关键点

这些public 方法只是确定private 应该调用哪个函数的包装器这些private 函数反过来查询适当的注册表项并处理结果。然而,真正的工作是在GetRegistryValue<T>函数中完成的这是一个通用函数,它返回一个boolean,该值指示是否找到了请求的注册表项,以及一个out包含该值参数。

需要注意的是,如果用户没有访问注册表的适当权限,该函数将抛出一个异常,该异常将向上冒泡给原始调用者。这样做是为了让调用者能够根据抛出的异常采取不同的操作。

附件:MSNET20.zip


该文章在 2021/6/11 17:48:18 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved