使用WIX安装HKGrotesk字体后,源安装文件中字体无法删除求解决
这个问题我碰到过好几次,本质是Windows安装字体后,系统进程(比如字体缓存服务、资源管理器)会持有源字体文件的句柄,导致你没法直接删除安装文件夹里的原文件。下面给你几个靠谱的解决方案,都能保证安装功能正常,同时解决删除问题:
方案1:安装完成后自动重启字体缓存服务
Windows的字体缓存服务(FontCache)是最常见的“占用元凶”,我们可以在WIX里加个自定义动作,安装完成后自动重启这个服务,释放文件锁定。
修改你的WIX配置,添加以下内容:
<!-- 定义重启字体缓存的自定义动作 --> <CustomAction Id="RestartFontCache" Execute="deferred" Impersonate="no" Command='cmd /c "net stop FontCache && net start FontCache"' /> <!-- 把动作放在安装完成后执行 --> <InstallExecuteSequence> <Custom Action="RestartFontCache" After="InstallFinalize" /> </InstallExecuteSequence>
这样安装完成后,服务会自动重启,你再去删除安装文件夹里的字体文件就不会提示占用了。
方案2:把字体文件嵌入MSI包(更省心)
如果你的安装文件夹不需要保留原字体文件,直接把字体打包进MSI里就行。WIX会自动把文件解压到临时目录,安装完成后临时目录会被系统清理,根本不用手动删除。
只需要给你的File元素加上Compressed="yes"属性:
<File Id="..." Source="fonts\HK\HKGrotesk-Black.otf" TrueType="yes" Compressed="yes" />
这样安装包运行时,字体文件不会留在安装文件夹里,自然也就没了删除的烦恼。
方案3:手动排查并释放占用(临时应急)
如果只是偶尔需要删除,你可以用微软的Process Explorer工具:
- 打开Process Explorer,点击菜单栏的
Find→Find Handle or DLL - 输入
HKGrotesk-Black.otf,找到占用文件的进程 - 右键结束该进程(注意:如果是explorer.exe,结束后可以在Process Explorer里重新启动它)
- 之后就能正常删除文件了
不过这个方法适合临时操作,不如前两种方法彻底。
内容的提问来源于stack exchange,提问作者Littack
相关产品推荐
相关产品推荐

