Почему MSI Patching TTF-файл шрифта всегда вызывает перезагрузку?
Мы создаем исправление MSP, которое обновляет файл шрифта TrueType (.TTF), но вызывает 1603 (перезагрузка требуется после установки.) Вот журнал MSI:
MSI (s) (5C:48) [23:33:56:432]: Executing op: FileCopy(SourceName=TestFont.ttf,SourceCabKey=testfont.ttf,DestName=TestFont.ttf,Attributes=20480,FileSize=34880,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,Version=1.3.0.0,,InstallMode=58982400,HashOptions=0,HashPart1=1022639218,HashPart2=1170530421,HashPart3=1359995143,HashPart4=-948212544,,)
MSI (s) (5C:48) [23:33:56:432]: File: C:\Program Files (x86)\TESTDIR\TestFont.ttf; Overwrite; Won't patch; Existing file is a lower version
MSI (s) (5C:48) [23:33:56:433]: Source for file 'passtrue.ttf' is compressed
InstallFiles: File: TestFont.ttf, Directory: C:\Program Files (x86)\TESTDIR\, Size: 34880
MSI (s) (5C:48) [23:33:56:434]: Re-applying security from existing file.
Info 1603. The file C:\Program Files (x86)\TESTDIR\TestFont.ttf is being held in use. Close that application and retry.
MSI (s) (5C:48) [23:33:57:765]: Verifying accessibility of file: TestFont.ttf
Я уверен, что файл не используется. (перезагрузил машину перед применением этого патча.)
Спасибо!
1 ответ
Наиболее вероятной причиной является то, что шрифт установлен как постоянный шрифт, т. Е. Он указан в реестре. Соответствующий раздел реестра:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
Как описано в разделе "Установка и удаление шрифтов":
Шрифт, установленный из папки, отличной от папки%windir%\fonts, не может быть изменен при загрузке в любом активном сеансе, включая сеанс 0. Поэтому любая попытка изменить, заменить или удалить будет заблокирована. [...] Постоянные шрифты остаются установленными после перезагрузки и загружаются всеми созданными сеансами.
Вы можете решить проблему, установив шрифт в %windir%\fonts
каталог или сделав его временным шрифтом.
(Обратите внимание, что это поведение относительно недавно, появившееся в обновлении безопасности MS14-045.)