只想补充一点,您发布的 MSI 文件中的字体表用于指定应在系统上注册的字体。
此处添加的字体条目将在系统上注册字体。您可以尝试从该表中删除条目以禁用字体注册。检查您的最终发行版 MSI,而不是您的 ISM(Installshield 源文件)。
对字体表中列出的字体进行的注册反映了当您使用 Windows 资源管理器将字体粘贴到系统的字体文件夹中时发生的情况 - 然后该字体会自动在系统上注册。
字体注册也有可能通过您的 MSI 中的自定义操作进行(也许您从其他人那里接管了项目),如果是这种情况,您也必须禁用该自定义操作。
这里有一些关于字体注册过程的信息:http : //windowsitpro.com/scripting/trick-installing-fonts-vbscript-or-powershell-script(从 Wayback Machine 复活)。
本质上:
- 通过 Windows 资源管理器复制到“字体文件夹”的字体文件会自动注册(shell 复制操作会触发注册过程)。
- 通过批处理文件或 VBScript 直接复制到“字体文件夹”的字体文件不会自动注册(使用 Shell.Application COM 对象注册它们)。
- 更新:2018 年 9 月- 不确定上述内容是否适用于所有新的操作系统版本?我没有花时间去测试。
- 通过 MSI 安装到“字体文件夹”的字体文件只要在 MSI 的字体表中列出(或通过自定义操作注册),就会被注册。
让我复制示例 VBScript 以从上面的链接注册字体,以防链接失效:
Set sa = CreateObject("Shell.Application")
Set fonts = sa.NameSpace(20)
fonts.CopyHere "C:\tmp\SomeFont.ttf"
在 PowerShell 中(十六进制 0x14 = 20 dec):
$sa = new-object -comobject shell.application
$Fonts = $sa.NameSpace(0x14)
$Fonts.CopyHere ("C:\tmp\SomeFont.ttf")
这么说,那些脚本并没有给我留下太多印象。但他们在那里:-)。