我在使用WiX时遇到了一些问题.我当前的警告是ICE60,它告诉我我的.ttf文件不是字体,它的版本不是伴随文件参考.它应该具有语言列中指定的语言.
此警告的问题是我无法为该文件设置语言版本.根据有关此警告的MSDN文档,我可以通过向字体文件添加版本来禁止它.不完全确定如何!
我的下一个警告是ICE69,不匹配的组件参考.快捷方式表的条目"ApplicationStartMenuShortcut"属于组件"ApplicationShortcut".但是,"Target"列中的格式化字符串引用了属于组件"MyApp.exe"的文件"MyApp.exe".组件具有相同的功能.
<?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>
Run Code Online (Sandbox Code Playgroud)
尽管两个警告,应用程序确实安装并正常工作.虽然谁喜欢警告,嗯?
我们非常感谢任何有关这些错误的帮助,我不想完全压制它们只是存在潜在的问题.
Pet*_*iho 29
关于ICE69警告,我以为我会提供一个更全面的讨论,我刚刚通过这个...
跨组件引用的问题源于评估格式化字符串的方式.如果已使用[$ componentkey]属性引用的组件已安装且在当前安装期间未更改(例如,重新安装,移至源等),则表达式[$ componentkey]的计算结果为null,因为[$ componentkey]中组件的操作状态为null.升级和修复操作期间可能会出现类似问题.
文档继续解释当引用跨越不同功能中的组件时,该消息是错误的,因为在引用功能时可能未安装定义功能,从而导致字符串为空值.
当两个组件具有相同的功能时,可能是因为只有一个组件与另一个组件一起安装,因此可以安全地使用该组件.所以你得到一个警告,表明你正在做一些可能不安全的事情但可能会有效.
有很多方法可以解决这个问题,包括:
[!...]
而不是[#...]
欺骗编译器忽略该问题.从MSI文档:如果找到[!filekey]形式的子字符串,则将其替换为文件的完整短路径,其值filekey用作File表中的键.只有在Registry或IniFile表的Value列中使用时,此语法才有效.在其他列中使用时,此语法的处理方式与[#filekey]相同.
换句话说,通过[!...]
在实际未使用该语法的场景中使用语法,编译器不会执行分析来处理[#...]
语法警告,但最终MSI仍将其视为该语法.您已经有效地从编译器中隐藏了该格式化字符串.
Target
在这种情况下你甚至没有使用属性,并且没有格式化的字符串).使用以下任何一种工具,您都可以编辑.ttf文件并添加所需的信息。
http://fontforge.org/editexample.html
http://sourceforge.net/projects/ttfedit/
关于不匹配的组件参考,可以安全地忽略正在得到的ICE错误。如果您希望摆脱它,可以改为宣传您的快捷方式。
http://blogs.technet.com/b/alexshev/archive/2008/02/20/from-msi-to-wix-part-10-shortcuts.aspx
否则,您可以抑制该验证错误。
归档时间: |
|
查看次数: |
7373 次 |
最近记录: |