WNet API не работает в Windows 8
У нас есть приложение.NET, которое использует WNet API через P/Invoke для перечисления сетевых ресурсов в сети Windows. Приложение отлично работает в Vista и Windows 7, но в Windows 8 ничего не обнаруживает.
Я попытался отладить его, и ошибок нет, он на самом деле находит несколько сетевых контейнеров на первом уровне, но затем внутри них он ничего не находит, он всегда возвращает ноль записей и код "больше никаких записей".
Есть ли известные проблемы с WNet API в Windows 8?
Спасибо михай
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));
сбой метода....