WIX:不显示 [产品版本] 中的内部版本号



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

您可以

省略 Product/@Version 属性的第 4 个字段,因为 Windows 安装程序无论如何都会忽略它。

<Product Version="4.6.0" ..>

如果确实要保留版本号的第 4 个字段,则必须编写自定义操作来分析字符串并去除第 4 个字段。

谢谢你@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" 到 Properties (Alt+Enter(> 工具设置>编译器 (蜡烛( 和链接器(光(中的相同。

使用起来非常简单:在我的 .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

最新更新