My Wix安装程序的产品版本设置如下:
<Product Version="4.6.0.0" ..>
我在UI中显示它:
<String Id="WelcomeDlgTitle">{\WixUI_Font_Bigger}Welcome to the [ProductName] v[ProductVersion] Setup Wizard</String>
这很好但我想省略内部版本号(即v4.6.0而不是v4.6.0.0)。有没有办法做到这一点?
答案 0 :(得分:2)
您可以将Product/@Version
属性的第4个字段省略为Windows Installer ignores it anyway。
<Product Version="4.6.0" ..>
如果你真的想保留版本号的第4个字段,你必须编写一个自定义动作来解析字符串并剥离第4个字段。
答案 1 :(得分:2)
谢谢你@ zett42,你的评论指出了我正确的方向 - 我创建了一个Wix预处理器扩展,遵循以下文档:http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/extension_development_preprocessor.html
以下是我创建的课程:
public class MaterialiserExtension : WixExtension
{
private MaterialiserPreprocessorExtension preprocessorExtension;
public override PreprocessorExtension PreprocessorExtension
{
get
{
if (this.preprocessorExtension == null)
{
this.preprocessorExtension = new MaterialiserPreprocessorExtension();
}
return this.preprocessorExtension;
}
}
}
public class MaterialiserPreprocessorExtension : PreprocessorExtension
{
private static string[] prefixes = { "versionUtil" };
public override string[] Prefixes { get { return prefixes; } }
public override string EvaluateFunction(string prefix, string function, string[] args)
{
string result = null;
switch (prefix)
{
case "versionUtil":
switch (function)
{
case "ToString":
if (0 < args.Length)
{
result = Version.Parse(args[0]).ToString(args.Length >1 && args[1] != null ? int.Parse(args[1]) : 4);
}
else
{
result = String.Empty;
}
break;
}
break;
}
return result;
}
}
有一点不是很明显 - 在我的Visual Studio Wix项目中,我不得不添加 -ext“$(SolutionDir)Materialiser.Wix \ bin \ Release \ Materialiser.Wix.dll”到属性(Alt + Enter)&gt;工具设置&gt;编译器(蜡烛)和链接器中的相同(光)。
使用,很简单: 在我的.wxs文件中,我定义了一个这样的属性:
<?define ProductVersion="4.6.0.5" ?>
然后我在像这样的产品中使用它:
<Product Version="$(var.ProductVersion)" .. >
然后我创建了一个这样的新属性:
<Property Id="VersionWithNoBuildNumber" Value="$(versionUtil.ToString([ProductVersion], 3))" />
在我的.wxl文件中我正常使用它:
<String Id="WelcomeDlgTitle">{\WixUI_Font_Bigger}Welcome to the [ProductName] v[VersionWithNoBuildNumber] Setup Wizard</String>
我希望这也有助于其他人:p