Существует несколько способов сделать это.
Очевидным решением является изменение статического IP-адреса с помощью апплета в панели управления.
Предполагая, что вы ищете программное решение, после изменения раздела реестра вы можете позвонить RegFlushKey(HKEY_LOCAL_MACHINE);
, чтобы сохранить изменения, а затем перезагрузить устройство.
Если вы хотите, чтобы изменения вступили в силу немедленно, то есть во избежание перезагрузки, вам нужно будет переустановить адаптер после настройки нового адреса. Вот пример (обработка ошибок опущена для ясности):
HANDLE h = CreateFile(L"NDS0:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
// Assuming adapter is called PHOTON1.
// Append extra NUL, IOCTL_NDIS_REBIND_ADAPTER expects a MULTI_SZ.
WCHAR adapter[] = "PHOTON1\0";
DeviceIoControl(h, IOCTL_NDIS_REBIND_ADAPTER, adapter, sizeof(adapter), NULL, 0, NULL, 0);
CloseHandle(h);
Опять же, если вы хотите изменить сохраняться после перезагрузки, вызовите RegFlushKey
после обновления реестра.
[DllImport ("coredll.dll")] public static extern int RegFlushKey (IntPtr hKey); const UInt32 HKEY_LOCAL_MACHINE = 0x80000003; RegistryKey rKey; rKey.SetValue («IPAddress», IPAddress_, RegistryValueKind.MultiString); rKey.Close(); IntPtr hkeylocalmachine = new IntPtr (unchecked ((int) HKEY_LOCAL_MACHINE)); RegFlushKey (hkeylocalmachine); – user1627210
Вы можете помочь мне проверить этот код? потому что после того, как я установил раздел реестра, все еще происходит одна и та же проблема, и нет никакого сообщения об исключении. – user1627210
Извините, когда вы говорите, что «такая же проблема произошла», вы имеете в виду, что IP-адрес никогда не меняется с тем, что вы его установили? Вы пытались перезагрузить устройство после вызова 'RegFlushKey'? (перезагрузка требуется, если вы не перепроверяете). Выполняется ли «RegFlushKey» (проверьте возвращаемое значение)? –