Как сказать MSI обновить заблокированные библиотеки DLL и избежать перезагрузок - PullRequest
0 голосов
/ 08 сентября 2010

У меня есть установщик MSI, который устанавливает продукт, и этот продукт имеет несколько широко используемых API-библиотек.Эти DLL могут быть загружены в процессы, которые я не могу контролировать во время обновления (например, я не могу попросить пользователя закрыть explorer.exe или svchost).Таким образом, во время обновления MSI эти библиотеки DLL заблокированы и не могут быть обновлены без перезагрузки.Мне нужно сделать его обновляемым без перезагрузки.Эти API-библиотеки очень стабильны, и приемлемо оставлять старые копии работающими в старых процессах, когда новые версии этих DLL будут загружаться в новые запущенные процессы.Таким образом, когда мы не использовали MSI, мы просто использовали стандартный трюк - переименуйте файл, отметьте его для удаления при перезагрузке, напишите новый файл.

Как лучше всего это сделать в MSI?Должен ли я создать пользовательское действие, которое будет делать этот стандартный трюк?Или, может быть, у MSI есть лучший способ сделать это?

Спасибо!

1 Ответ

1 голос
/ 08 сентября 2010

Процессы «заблокированы», потому что они используются, и вы не можете изменить исполняемый файл во время его работы;нет «разблокировки», кроме как прекратить использование файла.Так что либо вы сейчас уничтожаете процессы, либо используете ключ PendingFileRename для изменения файла после перезагрузки ...

Возможно, вы можете попытаться уничтожить дескрипторы / потоки, которые explorer.exe и другие должны держать в ваших DLL.(используя настраиваемое действие), которое может работать в течение минуты ... но это гарантирует, что (а) ваши недавно обновленные библиотеки DLL не будут работать до перезапуска, или (б) вы, вероятно, сделали компьютер пользователянестабильный и Explorer может произойти сбой в любой момент.В любом случае, конечные пользователи не будут довольны вашим программным обеспечением ... должно быть хуже, чем они будут раздражены необходимостью перезагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...