HttpListener.IsSupported is false on XP SP3

本文关键字:XP SP3 on false IsSupported is HttpListener | 更新日期: 2023-09-27 18:30:01

我们正试图在Windows XP SP3系统上部署一个使用HttpListener类的简单C#(framework 2.0)应用程序:该应用程序在初始化时中止,因为HttpListener.IsSupported属性是false

问题:是什么原因使HttpListener在(合理)最新的XP系统上不受支持?

可能重要的事情:

  • 用户不是其系统的管理员
  • 计算机上可能存在我不知道的安全策略(我不确定自己是否能够在没有管理员身份的情况下进行检查)

HttpListener.IsSupported is false on XP SP3

好的,在引擎盖下HttpListener类调用

[StructLayout(LayoutKind.Sequential)]
internal struct HTTPAPI_VERSION
{
    internal ushort HttpApiMajorVersion;
    internal ushort HttpApiMinorVersion;
}
[DllImport("httpapi.dll", CallingConvention=CallingConvention.StdCall, SetLastError=true, ExactSpelling=true)]
internal static extern unsafe uint HttpInitialize(HTTPAPI_VERSION version, uint flags, void* pReserved);

在XP:上

version.HttpApiMajorVersion = 2; 
version.HttpApiMinorVersion = 0;
flags = 5;
pReserved = null;

此处对此进行了描述。并设置bool supported = HttpInitialize(...) == 0;

您可以尝试使用PInvoke直接调用它,并检查返回的系统错误代码

一种可能性:XP Embedded似乎不支持HttpListener/http.sys,即使是SP2及更高版本。