NetworkInterface.GetAllNetworkInterfaces导致对内存位置的无效访问

时间:2017-06-02 15:13:14

标签: c# .net winapi network-interface

我有这段代码来获取具有特定名称的NetworkInterface

string myIf = "Local Area Connection";
NetworkInterface ni = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(i => i.Name == myIf);

但是,这会抛出一个NetworkInformationException: Invalid access to memory locationErrorCode为998(这意味着与例外情况完全相同)。

System.Net.NetworkInformation.NetworkInformationException was unhandled  
 ErrorCode=998
 HResult=-2147467259
 Message=Invalid  access to memory location
 NativeErrorCode=998
 Source=System  
 StackTrace:
      at System.Net.NetworkInformation.SystemNetworkInterface.GetNetworkInterfaces()
      at System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
      at MyApp.CheckIfNetworkOnline(Object state)
      at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state)
      at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
      at System.Threading.TimerQueueTimer.CallCallback()
      at System.Threading.TimerQueueTimer.Fire()
      at System.Threading.TimerQueue.FireNextTimers()
      at System.Threading.TimerQueue.AppDomainTimerCallback()   
 InnerException:

.NET文档声称这是由于“Windows系统函数调用失败”或“调用Win32函数失败”。

这是在.NET 4.5.2上,网络接口确实存在,并且应用程序已经以管理员身份运行。

什么可能导致出现此异常,是否有任何可以解决的问题?

1 个答案:

答案 0 :(得分:0)

我在32位网站上遇到了同样的问题,并且按照以下步骤解决了我的问题。

  1. 打开IIS
  2. 在左侧扩展您的计算机名称
  3. 选择“应用程序池”
  4. 选择站点的应用程序池
  5. 在操作的右侧,选择“高级设置”
  6. 在常规中将“启用32位应用程序”更改为false,然后按OK(确定)
  7. 在操作右侧,再次选择“高级设置”。
  8. 在常规中将“启用32位应用程序”更改为true,然后按“确定”