WIX:不显示[ProductVersion]的内部版本号

时间:2017-04-05 12:31:33

标签: wix windows-installer

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)。有没有办法做到这一点?

2 个答案:

答案 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