首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICE69 - ICE60和Wix警告

ICE69 - ICE60和Wix警告
EN

Stack Overflow用户
提问于 2014-01-24 06:07:09
回答 2查看 9.4K关注 0票数 12

我和WiX有一些问题。我当前的警告是ICE60,它告诉我我的.ttf文件不是字体,它的版本不是配套的文件引用。它应该在language列中指定语言。

此警告的问题是我无法为该文件设置语言版本。根据关于这个警告的MSDN文档,我可以通过在字体文件中添加一个版本来抑制它。不完全确定是怎么做的!

我的下一个警告是ICE69,不匹配的组件引用。快捷表的条目'ApplicationStartMenuShortcut‘属于组件'ApplicationShortcut’。但是,列'Target‘中的格式化字符串引用了属于组件'MyApp.exe’的文件'MyApp.exe‘。组件位于同一功能中。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
<?include "config.wxi"?>
<Product Id="*" UpgradeCode="67bd6fc7-c75b-434b-a305-2808541f8185" Version="1.0.0.0" Language="1033" Name="MyApp" Manufacturer="MyApp">

    <Package InstallerVersion="300" Compressed="yes"/>
    <Media Id="1" Cabinet="MyApp.cab" EmbedCab="yes" />

    <PropertyRef Id="NETFRAMEWORK45" />

    <Condition Message="This application requires .NET Framework 4.5. Please install the .NET Framework then run this installer again.">
        <![CDATA[Installed OR NETFRAMEWORK45]]>
    </Condition>

    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder">
            <Directory Id="APPLICATIONROOTDIRECTORY" Name="MyApp">
                <Directory Id="RESOURCESDIRECTORY" Name="Resources" />
            </Directory>
        </Directory>
        <Directory Id="ProgramMenuFolder">
            <Directory Id="ApplicationProgramsFolder" Name="MyApp"/>
        </Directory>
    </Directory>

    <Icon Id="_MyApp.ico" SourceFile="$(var.SourceDir)\Resources\MyApp.ico" />
    <Property Id="ARPPRODUCTICON" Value="_MyApp.ico" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

    <DirectoryRef Id="APPLICATIONROOTDIRECTORY">
        <Component Id="MyApp.exe" Guid="*">
            <File Id="MyApp.exe" Source="$(var.SourceDir)\MyApp.exe" KeyPath="yes" Checksum="yes"/>
        </Component>
        <Component Id="Xceed.Wpf.Toolkit.dll" Guid="*">
            <File Id="Xceed.Wpf.Toolkit.dll" Source="$(var.SourceDir)\Xceed.Wpf.Toolkit.dll" KeyPath="yes" Checksum="yes" />
        </Component>
    </DirectoryRef>
    <DirectoryRef Id="RESOURCESDIRECTORY">
        <Component Id="MyApp.ico" Guid="*">
            <File Id="MyApp.ico" Source="$(var.SourceDir)\Resources\MyApp.ico" KeyPath="yes" />
        </Component>
        <Component Id="FontAwesome.ttf" Guid="*">
            <File Id="FontAwesome.ttf" Source="$(var.SourceDir)\Resources\FontAwesome.ttf" KeyPath="yes" />
        </Component>
    </DirectoryRef>
    <DirectoryRef Id="ApplicationProgramsFolder">
        <Component Id="ApplicationShortcut" Guid="*">
            <Shortcut Id="ApplicationStartMenuShortcut"
                      Name="MyApp"
                      Description="Off-browser chat client for MyApp"
                      Target="[#MyApp.exe]"
                      WorkingDirectory="APPLICATIONROOTDIRECTORY" />
            <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall" />
            <RegistryValue Root="HKCU" Key="Software\Microsoft\MyApp" Name="installed" Type="integer" Value="1" KeyPath="yes" />
        </Component>
    </DirectoryRef>

    <Feature Id="MainApplication" Title="Main Application" Level="1">
        <ComponentRef Id="MyApp.exe" />
        <ComponentRef Id="Xceed.Wpf.Toolkit.dll" />
        <ComponentRef Id="MyApp.ico" />
        <ComponentRef Id="FontAwesome.ttf" />
        <ComponentRef Id="ApplicationShortcut" />
    </Feature>
</Product>
</Wix>

尽管有这两个警告,但应用程序确实安装并工作正常。不过,谁会喜欢警告呢?

对这些错误的任何帮助都是非常感谢的,我不想完全抑制它们,只是以防有潜在的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-25 04:34:27

下面的任一工具都允许您编辑.ttf文件并添加所需的信息。

http://fontforge.org/editexample.html

http://sourceforge.net/projects/ttfedit/

关于不匹配的组件引用,您得到的ICE错误可以安全地忽略。如果你想摆脱它,你可以广告你的快捷方式。

https://docs.microsoft.com/en-us/archive/blogs/alexshev/from-msi-to-wix-part-10-shortcuts

否则,您可以抑制该验证错误。

票数 7
EN

Stack Overflow用户

发布于 2015-07-03 03:24:58

关于ICE69的警告,我想我应该提供一个更全面的讨论,因为我刚刚经历了这个…

MSDN documentation for ICE69

跨组件引用的

问题源于格式化字符串的求值方式。如果已安装使用$componentkey属性引用的组件,并且在当前安装过程中未更改该组件(例如,重新安装、移至源代码等),则表达式$componentkey的计算结果为null,因为$componentkey中该组件的操作状态为null。在升级和修复操作过程中可能会出现类似的问题。

文档继续解释说,当引用跨不同功能中的组件时,消息是错误,因为在安装引用功能时可能没有安装定义功能,从而导致字符串为空值。

当两个组件在同一功能中时,可能是因为其中一个组件只与另一个组件一起安装,所以可以安全地使用字符串。因此,你会得到一个警告,表明你正在做一些潜在的不安全的事情,但这可能是可行的。

有许多方法可以解决这个问题,包括:

  • Sledge-hammer:只需禁用警告即可。打开WiX项目的属性,选择"Tool Settings“选项卡,然后在"Suppress specific ICE validation:”字段中输入"ICE69“:

  • Practical:通过解释格式化字符串的方式,您可以使用语法[!...]而不是[#...],并欺骗编译器忽略该问题。来自the MSI documentation

如果找到!filekey形式的子字符串,则将其替换为文件的完整短路径,并将值filekey用作文件表中的关键字。只有在注册表或IniFile表的值列中使用时,此语法才有效。在其他列中使用时,此语法被视为与#filekey相同。

换句话说,通过在实际不使用该语法的场景中使用MSI语法,编译器不会进行分析来处理[#...]语法的警告,但最终[!...]仍然将其视为该语法。您已经有效地对编译器隐藏了该格式化字符串。

理想的

  • Theoretical:使用广告快捷键,例如你的另一个答案中提到的the blog article。显然,只有当快捷方式中的引用生成警告时,这才有效。:)当然,使用广告中的快捷方式会带来其他复杂性。但这是一个选项,它将消除警告(因为在这种情况下您甚至没有使用Target属性,并且没有格式化字符串)。
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21320334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档