请,谁能提供一个完整的。wxs创建一个MSI包的例子?
我已经读过这个线程了:如何使用Wix安装Open Type字体
但这对我帮助不够。我想在这里添加评论,但是我没有足够的声望积分:/
怎么了?我收到以下错误:
D:shareITinstall-MSIMSI věvojfonty-2016>candle font-Gabka2.wxs
Windows Installer XML Toolset Compiler version 3.10.2.2516
Copyright (c) Outercurve Foundation. All rights reserved.
font-Gabka2.wxs
D:shareITinstall-MSIMSI věvojfonty-2016font-Gabka2.wxs(14) : warning CNDL1091 : The Package/@Id attribute has been set. Setting this attribute will allow nonidentical .msi files to have the same package code. This may be a problem because the package code is the primary identifier used by the installer to search for and validate the correct package for a given installation. If a package is changed without changing the package code, the installer may not use the newer package if both are still accessible to the installer. Please remove the Id attribute in order to automatically generate a new package code for each new .msi file.
D:shareITinstall-MSIMSI věvojfonty-2016>light font-Gabka2.wixobj
Windows Installer XML Toolset Linker version 3.10.2.2516
Copyright (c) Outercurve Foundation. All rights reserved.
D:shareITinstall-MSIMSI věvojfonty-2016font-Gabka2.wxs(34) : error LGHT0094 : Unresolved reference to symbol 'WixAction:InstallExecuteSequence/RemoveExistingProducts' in section 'Product:*'.
源WXS文件代码:
<?xml version='1.0'?>
<?define ProductName = "Font Gabka2 (SVČ Lužánky)"?>
<?define PrevProductVersion = "1.0"?> <!-- Match previous version, use "1.0.0" for new install if not known -->
<?define ProductVersion = "1.0"?> <!-- Match new version -->
<?define ProductCode = "PUT-GUID-HERE"?> <!-- Re-generate for new upgrade! (http://www.guidgen.com/) -->
<?define ProductUpgradeCode = "PUT-GUID-HERE"?> <!-- When upgrading, overwrite with previous ProductCode here. -->
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Id='*'
UpgradeCode="$(var.ProductUpgradeCode)"
Name="$(var.ProductName)"
Language='1033'
Version='$(var.ProductVersion)'
Manufacturer='SVČ Lužánky'>
<Package Id='$(var.ProductCode)'
Description='$(var.ProductName) $(var.ProductVersion)'
InstallerVersion='200'
Compressed='yes' />
<Media Id='1' Cabinet='setup.cab' EmbedCab='yes' />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="FontsFolder">
<Component Id="InstallFonts" Guid="*"> <!-- New GUID HERE FOR NEW FILE (no changes for upgrade, though) -->
<File Id="Gabka2.ttf" Source="Gabka2.ttf" TrueType="yes" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Upgrade Id="$(var.ProductUpgradeCode)">
<UpgradeVersion Minimum="$(var.ProductVersion)"
IncludeMinimum="no"
OnlyDetect="yes"
Language="1033"
Property="NEWPRODUCTFOUND" />
<UpgradeVersion Minimum="$(var.PrevProductVersion)"
IncludeMinimum="yes"
Maximum="$(var.ProductVersion)"
IncludeMaximum="no"
Language="1033"
Property="UPGRADEFOUND" />
</Upgrade>
<Property Id="ARPSYSTEMCOMPONENT" Value="1" />
<Feature Id='InstallFeature' Title='Install Feature' Level='1'>
<ComponentRef Id='InstallFonts' />
</Feature>
<!-- Prevent downgrading -->
<CustomAction Id="PreventDowngrading" Error="Newer version already installed." />
<InstallUISequence>
<Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWPRODUCTFOUND</Custom>
</InstallUISequence>
</Product>
</Wix>
谢谢
PS:如何在一个MSI中安装更多的TTF字体?如果我添加更多的文件,我得到这样的错误:
error CNDL0042 : The Component element has multiple key paths set. The key path may only be set to 'yes' in extension elements that support it or one of the following locations: Component/@KeyPath, File/@KeyPath, RegistryValue/@KeyPath, or ODBCDataSource/@KeyPath.
PS2:我已经使用这个项目https://github.com/pennmanor/wix-wrapper作为我的新WIX-MSI字体项目的模板基础。
一些错误的事情:
不要让包Id固定,使用"*",这样你在每次构建时都会得到一个新的值。
不需要自定义动作或升级元素来防止降级。使用majorupgrade元素——它似乎有你需要的一切。
字体错误信息似乎不适用于你发布的源代码,因为它指的是组件中的多个文件。
这类问题的解决方案如下:
1)"…错误CNDL0042:组件元素有多个键…"问题:
只需完全删除"KeyPath"属性,没有它也可以工作
2)多种字体:当1)完成,它是没有问题的,包括更多的字体,简单地添加更多的"文件"标签到"组件"子树。注意不要使用唯一的id。例子:
<Component Id="InstallFonts" Guid="a028a73b-xxxx-xxxx-xxxx-da4e3e03aef5"> <!-- New GUID HERE FOR NEW FILE (no changes for upgrade, though) -->
<File Id="Gabka2.ttf" Source="Gabka2.ttf" TrueType="yes" />
<File Id="Gabka2_bold.ttf" Source="Gabka2_bold.ttf" TrueType="yes" />
</Component>
3)"…错误LGHT0094:未解析的符号引用…"问题:
添加:
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize" />
</InstallExecuteSequence>
在结束产品标签之前。
4)编码/字符/代码问题("…错误LGHT0311:提供了一个字符串…"):
修正了在主"Product"标签中添加"Codepage"属性,即:
<Product Id='*'
Codepage="utf-8"
UpgradeCode="$(var.ProductUpgradeCode)"
Name="$(var.ProductName)"
Language='1033'
Version='$(var.ProductVersion)'
...
希望这对你有帮助,