为什么MSI修补TTF字体文件总是导致重启?

时间:2015-08-23 02:40:43

标签: windows-installer patch true-type-fonts msp

我们创建了一个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 个答案:

答案 0 :(得分:2)

最可能的原因是字体安装为永久字体,即它在注册表中列出。相关的注册表项是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

Font Installation and Deletion中所述:

  

从%windir%\ fonts文件夹以外的位置安装的字体在任何活动会话(包括会话0)中加载时都无法修改。因此,将阻止任何更改,替换或删除尝试。 [...]永久字体在重新启动后仍然安装,并由所有创建的会话加载。

您可以通过在%windir%\fonts目录中安装字体或将其设为临时字体来解决此问题。

(请注意,此行为相对较新,已在security update MS14-045中引入。)