Я хочу создать установщик для расширения оболочки, которое устанавливается только для текущего пользователя. Я хочу, чтобы как обновление, так и удаление работали как можно более плавно для конечного пользователя.
Проблема в том, что загруженная DLL расширения оболочки может быть незарегистрированной, но не удаленной, поскольку она заблокирована Проводником. Затем установщик застрянет, когда попытается удалить DLL. Поскольку расширение оболочки установлено только для текущего пользователя, я не могу использовать любую опцию «удалить DLL при перезагрузке», требующую прав администратора. Я также не могу использовать жесткий перезапуск explorer.exe, поскольку он может привести компьютер в нерабочее состояние для конечного пользователя: часто при перезапуске проводник выключается, но не запускается снова.
После просмотра DLL некоторых других приложений кажется, что некоторые могут использовать скользящие номера версий, например, shell_ext_v5.dll
, shell_ext_v6.dll
и т. Д. Новые версии получают новый номер, поэтому старые файлы DLL не обязательно должны быть удаленным.
Если я пойду с этой стратегией:
- При переустановке текущей версии я могу оставить DLL без изменений, поскольку она не изменилась.
- При обновлении будет установлена новая DLL, и реестр укажет на новую версию. Старый файл DLL останется в системе, хотя и не используется.
- При удалении DLL-файл может быть оставлен без восстановления, если он заблокирован Проводником.
Так что плохо в том, что в системе останутся DLL-файлы. Но хорошо, что установка / удаление никогда не застрянет, если DLL заблокирована. Как вы думаете? Есть ли альтернатива?