使用Wix将字体安装到本地字体文件夹

时间:2012-10-24 15:19:45

标签: fonts wix

我正在使用Wix为网站创建安装。

添加字体时,WiX会选择.ttf扩展名,并要求您将其安装到本地Font文件夹中(当使用Directory Id =“FontsFolder”和TrueType =“yes”时)。如果删除这些属性,它就会失败。

有没有办法让WiX将字体安装到自定义文件夹(../Content/fonts/)而不抱怨?

编辑:

   <Directory Id="dirFontsFolder" Name="fonts">
       <Component Id="cfont.ttf" Guid="BDEBACC8-D057-4406-87B9-B310BA6DFE27">
           <File Id="font.ttf" Source="$(var.SrcWebsite)\Content\fonts\font.ttf" KeyPath="yes" />
       </Component>
   </Directory>

使用上面的代码,我收到错误:

错误LGHT1076:ICE60:文件font.ttf不是Font,其版本不是伴随文件引用。它应该具有语言列中指定的语言。

4 个答案:

答案 0 :(得分:12)

几个月后问题被提出后,我们设法找到了问题:

KeyPath解决方案是答案的一半(参见Alex的答案)。如果不使用WiX中的KeyPath属性,以下解决方案将无效。

另一部分是WiX在打包MSI时通过Linker(light.exe)运行的内部一致性评估程序(ICE)。 ICE规则ICE07,检查文件的内容,如果确定该文件是字体,将强制该文件在Windows / Fonts中。

要阻止这种情况发生,您需要在light.exe运行时禁用此规则。为此,请在light.exe之后添加-sice:参数。对于我们的例子,它将是:

light.exe -sice:ICE07

您可以通过添加更多-sice参数来禁用多个规则。

答案 1 :(得分:5)

你可以用VS实现同样的目的:

右键单击“安装项目”,单击“属性”。

选择工具设置标签。

在ICE验证部分,您可以取消所有警告,或在这种情况下禁用特定的ICEXX

[ICE60]

OR

在相同的TAB(工具设置)上,您可以向编译器或链接器添加其他参数。因此,在链接器部分中添加

[ - SICE:ICE60]

答案 2 :(得分:4)

对于 bootstrap glyphicons_halflings.ttf 字体的特定情况,该字体通过设计进入网站的fonts文件夹,此解决方案无需支持ICE07警告

因为您还将同时安装匹配的woff,eot和svg webfonts,您可以指定TTF文件具有伴随文件而不是TrueType字体。

如果您天真地创建一个WiX片段,将Halflings字体文件添加到您的网站字体文件夹,如下所示:(根据需要替换部分GUID)

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="WebsiteFontsDir">
            <Component Id="CMP_WebsiteFonts" Guid="{********-482C-4924-B06E-9FAC34F89D1D}" KeyPath="yes">
                <File Id="glyphicons_halflings_regular.eot" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.eot" />
                <File Id="glyphicons_halflings_regular.svg" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.svg" />
                <File Id="glyphicons_halflings_regular.woff" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.woff" />
            </Component>
            <Component Id="CMP_WebsiteFonts2" Guid="{********-BFFE-441D-B8F4-156DD596B09F}" KeyPath="yes">
                <File Id="glyphicons_halflings_regular.ttf" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.ttf" DefaultVersion="1.001" TrueType="yes" />
            </Component>
     </DirectoryRef>
</Fragment>

它会将文件添加到正确的位置,但构建解决方案会产生 ICE07 验证警告,警告TTF字体文件必须放在Windows Font文件夹中。

鉴于这是一个网络字体并且不应该去那里非常烦人,但幸运的是因为它是一种网络字体,你需要它以多种格式来安抚IE,Edge,Chrome,Firefox等......这意味着您可以使用非TTF字体变体的存在来消除警告。

像这样重构片段:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="WebsiteFontsDir">
            <Component Id="CMP_WebsiteFonts" Guid="{********-482C-4924-B06E-9FAC34F89D1D}" KeyPath="yes">
                <File Id="glyphicons_halflings_regular.eot" Source="$(var.AZViewerModule.TargetDir)fonts\glyphicons-halflings-regular.eot" />
                <File Id="glyphicons_halflings_regular.svg" Source="$(var.AZViewerModule.TargetDir)fonts\glyphicons-halflings-regular.svg" />
                <File Id="glyphicons_halflings_regular.woff" Source="$(var.AZViewerModule.TargetDir)fonts\glyphicons-halflings-regular.woff" />
            </Component>
            <Component Id="CMP_WebsiteFonts2" Guid="{********-BFFE-441D-B8F4-156DD596B09F}">
                <File Id="glyphicons_halflings_regular.ttf" 
                  Source="$(var.ViewerModule.TargetDir)fonts\glyphicons-halflings-regular.ttf" 
                  TrueType="no" 
                  KeyPath="no"
                  CompanionFile="glyphicons_halflings_regular.eot"/>
            </Component>
        </DirectoryRef>
    </Fragment>
</Wix>

这里我们拒绝它的TTF字体,并为它提供一个伴随文件,这是其他Web字体文件之一。一切都安装在您期望的地方,不会产生ICE07。

答案 3 :(得分:2)

<Directory Id="WixWorkshop" Name="WixWorkshop">
  <Component Id="Component1" Guid="DE1705EF-B96A-4746-AA9F-2C9D598E7D08">
    <File Id="File1" Name="arial.ttf" Source="arial.ttf" KeyPath="yes"/>
  </Component>
</Directory>

效果很好 - 任何组件都应该引用目录