Не удалось установить статический IP-адрес через ключ реестра - Windows CE 5.0

Я нашел свой IP-адрес в HKEY_LOCAL_MACHINE\Comm\PCCARD\PHOTON1\PARMS\TCPIP через удаленный редактор реестра Windows CE. После того, как я изменил IP-адрес, но он продолжает возвращать предыдущий IP-адрес, который я установил на КПК. В любом случае, чтобы решить эту проблему? *Мне удалось изменить домашнюю страницу ie через редактор реестра.

извините за мой плохой английский.


person user1627210    schedule 09.10.2015    source источник


Ответы (2)


Есть несколько способов сделать это.

Очевидное решение — изменить статический 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 после обновления реестра.

person Carsten Hansen    schedule 09.10.2015
comment
[DllImport(coredll.dll)] public static extern int RegFlushKey(IntPtr hKey); константа UInt32 HKEY_LOCAL_MACHINE = 0x80000003; ключ реестра rKey; rKey.SetValue(IPAddress, IPAddress_,RegistryValueKind.MultiString); rKey.Закрыть(); IntPtr hkeylocalmachine = новый IntPtr (не проверено ((int) HKEY_LOCAL_MACHINE)); RegFlushKey(hkeylocalmachine); - person user1627210; 09.10.2015
comment
Можете ли вы помочь мне проверить этот код? потому что после того, как я установил раздел реестра, все еще возникает та же проблема, и нет никакого сообщения об исключении. - person user1627210; 09.10.2015
comment
Извините, когда вы говорите, что произошла та же проблема, вы имеете в виду, что IP-адрес никогда не меняется на то, что вы установили? Пробовали ли вы перезагружать устройство после звонка RegFlushKey? (требуется перезагрузка, если вы не выполняете повторную привязку). Выполняется ли RegFlushKey успешно (проверьте возвращаемое значение)? - person Carsten Hansen; 09.10.2015
comment
RegFlushKey работает успешно, IP-адрес изменен, и я могу просмотреть его в удаленном редакторе реестра. Но после перезагрузки устройства я проверяю удаленный редактор реестра, и IP-адрес возвращается к предыдущему IP-адресу. - person user1627210; 09.10.2015
comment
Вы уверены, что раздел реестра правильный? Обычно IP-адрес хранится под HKLM\Comm\<Adapter name>\Parms\TcpIp. Например, вы видите что-нибудь под HKLM\Comm\PHOTON1\Parms\TcpIp? Также сохраняется ли измененная информация о домашней странице IE после перезагрузки? - person Carsten Hansen; 11.10.2015
comment
Если вы можете изменить IP-адрес в панели управления, а новый IP-адрес используется после перезагрузки, то проблема почти наверняка связана с ключом/путем реестра. - person Carsten Hansen; 11.10.2015

Если у вас есть кустовой реестр (данные сохраняются в файлах), вы можете изменить IP-адрес один раз, и тогда вы всегда будете видеть этот адрес.

Если у вас на базе ОЗУ данные реестра теряются после перезагрузки (видимо ваш случай) и тогда вам нужно написать программу автозапуска, которая при каждой загрузке устанавливала бы IP устройства на тот, который вам нужен.

person salvolds    schedule 19.10.2015