我们创建了一个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
我确定该文件未被使用。 (在应用此补丁之前重启机器。)
谢谢!
答案 0 :(得分:2)
最可能的原因是字体安装为永久字体,即它在注册表中列出。相关的注册表项是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
如Font Installation and Deletion中所述:
从%windir%\ fonts文件夹以外的位置安装的字体在任何活动会话(包括会话0)中加载时都无法修改。因此,将阻止任何更改,替换或删除尝试。 [...]永久字体在重新启动后仍然安装,并由所有创建的会话加载。
您可以通过在%windir%\fonts
目录中安装字体或将其设为临时字体来解决此问题。
(请注意,此行为相对较新,已在security update MS14-045中引入。)