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
类调用
[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及更高版本。