使用 ADSI 获取 IIS 版本号有问题,在 Windows Server 2003 下正确运行,但在 Windows XP SP2 却显示下面的错误
System.NullReferenceException: Object reference not set to an instance of an object.
at IISHelper.GetIISServerType() in D:\Documents and Settings\桌面\IISMangment\IISMangment\Class1.cs:line 50
at IISMangment.Form1.Form1_Load(Object sender, EventArgs e) in D:\Documents and Settings\桌面\IISMangment\IISMangment\Form1.cs:line 24
源代码如下:using System.DirectoryServices;
using System;
/**/
/// <summary>
/// 服务器IIS版本
/// </summary>
[Serializable]
public enum WebServerTypes
{
/**/
/// <summary>
/// 未知版本
/// </summary>
Unknown,
/**/
/// <summary>
/// IIS 4.0
/// </summary>
IIS4,
/**/
/// <summary>
/// IIS 5.0,5.1
/// </summary>
IIS5,
/**/
/// <summary>
/// IIS 6.0
/// </summary>
IIS6,
/**/
/// <summary>
/// IIS 7.0
/// </summary>
IIS7
}public class IISHelper
{
/**/
/// <summary>
/// 获取服务器IIS版本
/// </summary>
/// <returns></returns>
public WebServerTypes GetIISServerType()
{
string DomainName = "LOCALHOST";
string path = "IIS://" + DomainName + "/W3SVC/INFO";
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(path);
int num = -1;
num = (int)entry.Properties["MajorIISVersionNumber"].Value;//此行代码在 Windows XP SP2 下有问题。
switch (num)
{
case 4:
return WebServerTypes.IIS4;
case 5:
return WebServerTypes.IIS5;
case 6:
return WebServerTypes.IIS6;
case 7:
return WebServerTypes.IIS7;
default:
return WebServerTypes.Unknown;
}
}
}
System.NullReferenceException: Object reference not set to an instance of an object.
at IISHelper.GetIISServerType() in D:\Documents and Settings\桌面\IISMangment\IISMangment\Class1.cs:line 50
at IISMangment.Form1.Form1_Load(Object sender, EventArgs e) in D:\Documents and Settings\桌面\IISMangment\IISMangment\Form1.cs:line 24
源代码如下:using System.DirectoryServices;
using System;
/**/
/// <summary>
/// 服务器IIS版本
/// </summary>
[Serializable]
public enum WebServerTypes
{
/**/
/// <summary>
/// 未知版本
/// </summary>
Unknown,
/**/
/// <summary>
/// IIS 4.0
/// </summary>
IIS4,
/**/
/// <summary>
/// IIS 5.0,5.1
/// </summary>
IIS5,
/**/
/// <summary>
/// IIS 6.0
/// </summary>
IIS6,
/**/
/// <summary>
/// IIS 7.0
/// </summary>
IIS7
}public class IISHelper
{
/**/
/// <summary>
/// 获取服务器IIS版本
/// </summary>
/// <returns></returns>
public WebServerTypes GetIISServerType()
{
string DomainName = "LOCALHOST";
string path = "IIS://" + DomainName + "/W3SVC/INFO";
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(path);
int num = -1;
num = (int)entry.Properties["MajorIISVersionNumber"].Value;//此行代码在 Windows XP SP2 下有问题。
switch (num)
{
case 4:
return WebServerTypes.IIS4;
case 5:
return WebServerTypes.IIS5;
case 6:
return WebServerTypes.IIS6;
case 7:
return WebServerTypes.IIS7;
default:
return WebServerTypes.Unknown;
}
}
}
解决方案 »
- 坑爹呐这是!!!先到先得一次性给
- 面试题,一个数组处理的方法。看了半天也没弄出来,高手给瞧瞧。
- 求教怎么用线程池实现传递参数并控制线程数目?谢谢了
- 关于变量和类型如何命名的问题
- 期望高手来指点:建立一个接受器,采集指定的一台主机上传来的数据,并且数据量的峰值可能很大,如何做。最好用C#
- catch (Exception e)报警告!
- 如何在c#下实现图文并貌的编辑.
- [讨论]:欢迎各路神仙进入,发表自己的观点!!!
- 怎么在桌面画图啊??高分!!!
- 铁道出版社,找作者写dotnet!丛书
- 关于在datagridview中控制输入的奇怪的问题:textbox中无法输入小数点,请大家帮忙!
- 服务器的信息转发问题
But for Windows XP, It is difficult to get because it store in a binary. try
{
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Environment.SystemDirectory + @"\inetsrv\inetinfo.exe");
Console.WriteLine("Version:" + fvi.FileVersion + "\nMajor Part: " + fvi.FileMajorPart + "." + fvi.FileMinorPart);
}
catch (FileNotFoundException ex)
{
throw ex;
}
但是如何操作管理IIS却仍然没有解决(virusplayer 给的那个IIS管理类还是不能在Windows XP下正确运行的),大家帮帮忙吧
俺还在痛苦中......
{
/**/
/// <summary>
/// 获取服务器IIS版本
/// </summary>
/// <returns></returns>
public WebServerTypes GetIISServerType()
{
string DomainName = "LOCALHOST";
string path = "IIS://" + DomainName + "/W3SVC/INFO";
System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(path);
int num = -1;
try
{
num = (int)entry.Properties["MajorIISVersionNumber"].Value;//此行代码在 Windows XP SP2 下有问题。
}
catch (Excption ex)
{
}
try
{
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(Environment.SystemDirectory + @"\inetsrv\inetinfo.exe");
num = fvi.FileMajorPart;
}
catch (Excption ex)
{
throw ex;
} switch (num)
{
case 4:
return WebServerTypes.IIS4;
case 5:
return WebServerTypes.IIS5;
case 6:
return WebServerTypes.IIS6;
case 7:
return WebServerTypes.IIS7;
default:
return WebServerTypes.Unknown;
}
}
}
是的,我想包装一个 IIS 网络站点管理的类,例如:列表网站信息,创建网站等一系列功能。
我在互联网上搜索了很久也没有找到能够在 Windows XP SP2上正确运行的相关代码,请您帮帮忙。
IIS 5.1 and earlier: This property is not available.http://msdn.microsoft.com/en-us/library/ms525644(VS.85).aspxAnother solution to get IIS version is by using registry keys:http://www.codeproject.com/KB/cs/iisdetection.aspxHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\MajorVersion
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\MinorVersion
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\VersionString================
Hope this help ...
System.DirectoryServices.DirectoryEntry Service = new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC");
Service.Children.GetEnumerator();//这行代码无法正确运行,这意味着IIS5和IIS7等其他版本IIS环境下根本无法正常运行。
你能贴一下代码吗?Web Site 和 Virtual Directory 的路径是不同的
“/W3SVC” 是IIS总路径
“/W3SVC/1” 是默认的Web Site“/W3SVC/<SiteID>”
SiteID 可以是2,3...Virtual Directory 的路径是
/W3SVC/1/Root/testtest 是在默认网站下的虚拟目录
namespace IISServer
{
/// <summary>
/// 服务器 IIS 版本
/// </summary>
[System.Serializable]
public enum IISVersion
{
/// <summary>
/// 未知版本
/// </summary>
Unknown,
/// <summary>
/// IIS 4.0
/// </summary>
IIS4,
/// <summary>
/// IIS 5.0,5.1
/// </summary>
IIS5,
/// <summary>
/// IIS 6.0
/// </summary>
IIS6,
/// <summary>
/// IIS 7.0
/// </summary>
IIS7
} /// <summary>
/// 网站的状态。
/// </summary>
public enum IISServerState
{
/// <summary>
/// 正在启动。
/// </summary>
Starting = 1,
/// <summary>
/// 已经启动。
/// </summary>
Started = 2,
/// <summary>
/// 正在停止。
/// </summary>
Stopping = 3,
/// <summary>
/// 已经停止。
/// </summary>
Stopped = 4,
/// <summary>
/// 正在暂停。
/// </summary>
Pausing = 5,
/// <summary>
/// 已经暂停。
/// </summary>
Paused = 6,
/// <summary>
///
/// </summary>
Continuing = 7 }
/// <summary>
/// ASP.NET 版本。
/// </summary>
public enum AspNetVersion
{
/// <summary>
/// 默认设置。
/// </summary>
Default,
/// <summary>
/// ASP.NET 1.1
/// </summary>
ASP_NET_1_1,
/// <summary>
/// ASP.NET 2.0
/// </summary>
ASP_NET_2_0,
}
/// IIS 管理类。
/// </summary>
public class IISManagement
{
#region ASP.NET 脚本影射。
/// <summary>
/// ASP.NET 1.1 脚本影射。
/// </summary>
private static readonly string[] ScriptMaps_1_1 = new string[] {
@".asp,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".cer,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".cdx,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".asa,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".idc,C:\WINDOWS\system32\inetsrv\httpodbc.dll,5,GET,POST"
, @".shtm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST"
, @".shtml,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST"
, @".stm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST"
, @".asax,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ascx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ashx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".asmx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".aspx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".axd,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".vsdisco,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".rem,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".soap,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".config,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".cs,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".csproj,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".vb,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".vbproj,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".webinfo,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".licx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".resx,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".resources,C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
};
/// ASP.NET 2.0 脚本影射。
/// </summary>
private static readonly string[] ScriptMaps_2_0 = new string[] {
@".asp,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".cer,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".cdx,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".asa,C:\WINDOWS\system32\inetsrv\asp.dll,5,GET,HEAD,POST,TRACE"
, @".idc,C:\WINDOWS\system32\inetsrv\httpodbc.dll,5,GET,POST"
, @".shtm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST"
, @".shtml,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST"
, @".stm,C:\WINDOWS\system32\inetsrv\ssinc.dll,5,GET,POST"
, @".asax,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ascx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ashx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".asmx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".aspx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".axd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".vsdisco,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".rem,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".soap,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".config,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".cs,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".csproj,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".vb,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".vbproj,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".webinfo,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".licx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".resx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".resources,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".master,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".skin,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".compiled,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".browser,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".mdb,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".jsl,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".vjsproj,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".sitemap,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".msgx,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".ad,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".dd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ldd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".sd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".cd,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".adprototype,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".lddprototype,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".sdm,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".sdmDocument,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ldb,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".svc,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG"
, @".mdf,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".ldf,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".java,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".exclude,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
, @".refresh,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG"
}; #endregion private string _Machinename = @"localhost";
/// <summary>
/// 获取机器名,默认值为 localhost
/// </summary>
public string Machinename
{
get
{
return this._Machinename;
}
}
private System.DirectoryServices.DirectoryEntry _Service = null;
/// <summary>
/// 获取 IIS 服务对象。
/// </summary>
private System.DirectoryServices.DirectoryEntry Service
{
get
{
if (this._Service == null)
{
this._Service = new System.DirectoryServices.DirectoryEntry("IIS://" + this.Machinename + "/W3SVC");
}
return this._Service;
} } /// <summary>
/// 获取默认 IIS 匿名访问用户名。
/// </summary>
private string DefaultAnonymousUserName
{
get
{
return (string)this.Service.Properties["AnonymousUserName"][0];
}
} /// <summary>
/// 获取默认 IIS 匿名访问用户密码。
/// </summary>
private string DefaultAnonymousUserPass
{
get
{
return (string)this.Service.Properties["AnonymousUserPass"][0];
}
} /// <summary>
/// 初始化此实例。
/// </summary>
public IISManagement()
{ } /// <summary>
/// 用指定的机器名初始化此实例。
/// </summary>
/// <param name="MachineName">机器名,默认值为localhost</param>
public IISManagement(string MachineName)
{
if (MachineName.ToString() != "")
{
this._Machinename = MachineName;
} }
/// <summary>
/// 一个析构方法,用于释放占用的资源。
/// </summary>
~IISManagement()
{
if (this._Service != null)
{
this._Service.Close();
this._Service = null;
} }
由于IIS 5.1只允许存在一个站点,所以没有创建和删除站点一说,但是可以创建和删除虚拟目录。
获取站点的方法与IIS 6差不多,只不过因为只有一个站点,所以微软给IIS://localhost/W3SVC屏蔽了,而我们也只能使用
IIS://localhost/W3SVC/1来获取这个站点的信息。我描述的不一定准确,但是ADSI管理IIS5.1的关键肯定是说清楚了。