如何在 Installshield (2011) 基本 msi 项目中禁用字体注册?

How do I disable font registration in an Installshield (2011) basic msi project?

如何阻止 installshield 注册字体?

我有许多部署 Web 应用程序的 installshield 项目,它们都具有 GlyphIcons 和 FontAwesome 字体。 Installshield 自动向操作系统注册这些文件(*.ttf、*.eot、*.otf)。

这是一个问题,因为无法删除文件以进行卸载或升级。

说明 here or here 不起作用,因为这些字段根本不存在于我的 installshield/project 类型版本中。

是否有另一种方法可以在不重命名文件的情况下禁用此行为?

我发现了一个 suggestion on the Installshield 论坛似乎可以使用。

要禁用字体注册:

  1. 转到"Custom Actions and Sequences"
  2. 在 Sequences 下找到 "RegisterFonts" 操作,执行
  3. 将 "Conditions" 设置为 0

只想补充一点,您发布的 MSI 文件中的 Font Table 用于指定应在系统上注册的字体

此处添加的字体条目将在系统上注册字体。您可以尝试从此 table 中删除条目以禁用字体注册。检查您的最终版本 MSI 而不是您的 ISM(Installshield 源文件)。

字体 table 中列出的字体发生的注册反映了使用 Windows 资源管理器将字体粘贴到系统字体文件夹时发生的情况 - 然后字体自动注册到系统.

也有可能通过您的 MSI 中的自定义操作进行字体注册(也许您从其他人那里接管了该项目),如果是这种情况,您也必须禁用该自定义操作。


这里有一些关于字体注册过程的信息:http://windowsitpro.com/scripting/trick-installing-fonts-vbscript-or-powershell-script(从 Wayback Machine 复活)。

基本上:

  • 通过 Windows 资源管理器复制到“字体文件夹”的字体文件会自动注册(shell 复制操作会触发注册过程)。
  • 通过批处理文件或 VBScript 直接复制到“字体文件夹”的字体文件不会自动注册(使用 Shell.Application COM 对象注册它们)。
  • 更新2018 年 9 月 - 不确定以上内容是否适用于所有新的 OS 版本?我还没有花时间测试。
  • 通过 MSI 安装到“字体文件夹”的字体文件只要列在 MSI 的字体 table 中(或者通过自定义操作注册),就会被注册。

让我复制示例 VBScript 以从上面的 link 注册字体,以防 link 死掉:

Set sa = CreateObject("Shell.Application")
Set fonts  = sa.NameSpace(20)
fonts.CopyHere "C:\tmp\SomeFont.ttf"

在 PowerShell 中(十六进制 0x14 = 20 十进制):

$sa =  new-object -comobject shell.application
$Fonts =  $sa.NameSpace(0x14)
$Fonts.CopyHere ("C:\tmp\SomeFont.ttf")

这些脚本并没有给我留下太多印象,这样说吧。但是他们在那里 :-).

我真的来晚了。

我一直在使用相同的字体(awesome 和 glyphicons 以及来自第 3 方的其他字体)遇到同样的问题,并且遇到自动注册的同样问题。

您必须从直接编辑器部分下的字体 table 中手动删除它们。

查看此 HOWTO: https://flexeracommunity.force.com/customer/articles/en_US/HOWTO/Installing-Fonts-Without-Registering-Them-in-the-Registry