Обновление CESelfRegistered DLL в Windows Mobile

Мне нужно обновить приложение, использующее самозарегистрированную DLL (зарегистрированную через CESelfRegistered). При регистрации DLL записывает в реестр некоторые пути, которые она будет использовать в будущем.

Теперь проблема в том, что в моей новой DLL сохраненный путь отличается. А поскольку DLL активна в памяти устройства, то в процессе обновления при регистрации вызывается файл СТАРОЙ DLL. Таким образом, после завершения обновления и перезагрузки устройства новая DLL по-прежнему считывает старые настройки.

Какой должна быть правильная процедура, чтобы избежать такого поведения?


person Riho    schedule 07.05.2013    source источник
comment
Ад с DLL. Что произойдет, если вы скопируете новую DLL в оба места (удалите или переименуете исходную DLL во что-то другое), а затем зарегистрируете новую DLL?   -  person jp2code    schedule 07.05.2013
comment
Старая DLL удаляется вместе со старой версией моего приложения в начале процесса установки. Но старая прописанная DLL остается в памяти. Для уточнения - новое приложение установлено в другом месте (поскольку название нашей компании было изменено, поэтому новый путь не может содержать старое название).   -  person Riho    schedule 07.05.2013


Ответы (1)


Чтобы обновить работающее приложение, использующее DLL, вы должны написать установщик, который убивает или завершает работающий exe, удаляет exe, включая DLL, а затем устанавливает новый exe и dll.

Например, вы можете написать CAB-файл setup.dll, который остановит/убьет исполняемый файл и отменит регистрацию DLL в install_init. Возможно, добавьте код для удаления старой записи реестра. CE Setup DLL — это возможность запуска кода до и после инициализации установки и удаления во время установки CAB.

Вы также можете написать код внутри приложения, которое выполняет замену этих exe-файлов и dll, включая уничтожение exe-файлов и т. д. Затем включите этот exe-файл обновления в процесс запуска и запустите его один раз.

Вы не можете полагаться на запуск приложения из ce_setup.dll, если приложение еще не установлено.

См. http://msdn.microsoft.com/en-us/library/aa924308.aspx для описания ce_setup.dll

person josef    schedule 08.05.2013