WNet API 在 Windows 8 中不起作用

Posted

技术标签:

【中文标题】WNet API 在 Windows 8 中不起作用【英文标题】:WNet API doesn't work in Windows 8 【发布时间】:2013-08-29 12:40:59 【问题描述】:

我们有一个 .NET 应用程序,它通过 P/Invoke 使用 WNet API 来枚举 Windows 网络中的网络资源。该应用程序在 Vista 和 Windows 7 上完美运行,但在 Windows 8 中它什么也找不到。

我已经尝试调试它并且没有错误,它实际上在第一级找到了一些网络容器,但是在其中它什么也没找到,它总是返回零条目和“没有更多条目”代码。

Windows 8 上的 WNet API 是否存在任何已知问题?

谢谢, 米海

【问题讨论】:

这些资源是否存在于 Windows 资源管理器中?如果不是,可能是 Windows 8 上的网络配置不正确。 是的,我可以从文件资源管理器浏览网络(现在在 Win 8 中调用它)。 您发现问题了吗?我相信这与 Hyper-V 以及 Windows 8 如何位于 Hyper V 上有关。 【参考方案1】:

解决方案

我将代码更改为http://www.pinvoke.net/default.aspx/netapi32/netserverenum.html 一切正常

¡ 使用 SERVER_INFO_101 !

我对这段代码也有同样的问题

int ret = NetServerEnum(null, 100, ref buffer,
                    MAX_PREFERRED_LENGTH,
                    out entriesRead,
                    out totalEntries, SV_TYPE_WORKSTATION | SV_TYPE_SERVER | SV_TYPE_WINDOWS | SV_TYPE_NT, null, out 
                resHandle);
                //if the returned with a NERR_Success 
                //(C++ term), =0 for C#
                if (ret == 0)
                
                    //loop through all SV_TYPE_WORKSTATION 
                    //and SV_TYPE_SERVER PC's
                    for (int i = 0; i < totalEntries; i++)
                    
                        //get pointer to, Pointer to the 
                        //buffer that received the data from
                        //the call to NetServerEnum. 
                        //Must ensure to use correct size of 
                        //STRUCTURE to ensure correct 
                        //location in memory is pointed to
                        tmpBuffer = new IntPtr((int)buffer + (i * sizeofINFO));
                        //Have now got a pointer to the list 
                        //of SV_TYPE_WORKSTATION and 
                        //SV_TYPE_SERVER PC's, which is unmanaged memory
                        //Needs to Marshal data from an 
                        //unmanaged block of memory to a 
                        //managed object, again using 
                        //STRUCTURE to ensure the correct data
                        //is marshalled 
                        _SERVER_INFO_100 svrInfo = (_SERVER_INFO_100)Marshal.PtrToStructure(tmpBuffer, typeof(_SERVER_INFO_100));
                        //add the PC names to the ArrayList
                        networkComputers.Add(svrInfo.sv100_name);
                    
                

排队

                        tmpBuffer = new IntPtr((int)buffer + (i * sizeofINFO));

方法崩溃....

【讨论】:

以上是关于WNet API 在 Windows 8 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

自动热键像素搜索在 Windows 8.1 中不起作用

反应本机推送通知在 Android 8.1(API 级别 27)中不起作用

BackgroundMediaPlayer 在 Windows Phone 8.1 中不起作用

带有 DiscreteObjectKeyFrame 的情节提要在 windows phone 8 中不起作用

SystemTriggerType SmsReceived 任务在 windows phone 8.1 通用应用程序中不起作用

Windows 8.1 背景音频播放器在应用程序的其他页面中不起作用