Wix 安装部署教程(十六) -- 自动生成多语言文件

简介: 原文:Wix 安装部署教程(十六) -- 自动生成多语言文件     因为持续集成需要,所有项目编译完之后生成一个多语言的安装包。之前生成mst文件都是手动操作,而且mst文件必须每次重新和新的安装包“关联”,否则中文的安装包去调用英文的资源的时候就会报类似于“类型转换失败”的错误。
原文: Wix 安装部署教程(十六) -- 自动生成多语言文件

     因为持续集成需要,所有项目编译完之后生成一个多语言的安装包。之前生成mst文件都是手动操作,而且mst文件必须每次重新和新的安装包“关联”,否则中文的安装包去调用英文的资源的时候就会报类似于“类型转换失败”的错误。基于这两点,有必要程序化这个流程,不然每次打包都得找我了。以下是程序的记录。比较简单。

     其实就是用程序调用cmd,再次之前,请记得将wix的bin目录加入到系统变量中。否则命令不会被识别;然后将程序执行目录指向目标目录。 

 static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                return;
            }
            Console.WriteLine(args[0]);

            var path = args[0];
          //  var path =MsiPath;
            
            Console.WriteLine("正在执行:" + DateTime.Now);
            var p = new Process
            {
                StartInfo =
                {
                    FileName = "cmd.exe ",
                    UseShellExecute = false,
                    RedirectStandardInput = true,
                    RedirectStandardOutput = true,
                    RedirectStandardError = true,
                    CreateNoWindow = false,
                    WorkingDirectory = path
                }
            };
            try
            {
                p.Start();

                if (!Init(p, path))
                {
                    Console.WriteLine("初始化失败");
                    p.Close();
                    return;
                }
                //合并语言
                ExcComand(p, CommandLines.LanZh_TW);
                ExcComand(p, CommandLines.LanZh_CN);
                ExcComand(p, CommandLines.LanEN_US);
                
                //关联语言
                ExcComand(p, CommandLines.CombanLanZh_cn);
                //测试安装包
               // ExcComand(p, CommandLines.Testzh_Tw);

                //p.WaitForExit();
                p.Close();
                Console.WriteLine("Complete" + DateTime.Now);
            }
            catch (Exception e1)
            {
                Console.WriteLine("error" + e1.Message);
            }

        }

  先初始化,确保安装文件、vbs文件和mst文件都存在。

  private static string[] lans = { "zh-cn", "en-us", "zh-tw" };
        private static bool Init(Process p, string path)
        {
            //多语言安装包是否存在 
            foreach (var lan in lans)
            {
                var lanPath = Path.Combine(path, lan, SoftName);
                if (!File.Exists(lanPath))
                {
                    Console.WriteLine("{0}安装包不存在!",lan);
                    return false;
                }
            }
            //保证两个文件
            CopyFileIfNotExist(path,"WixSubStg.vbs");
            CopyFileIfNotExist(path, "WiLangId.vbs");

            //变形文件是否存在
            var twmst = Path.Combine(path, "transforms", "zh-tw.mst");
            if (!File.Exists(twmst))
            {
                GetTransforms(p);
            }

            //再检测一次
            return File.Exists(twmst);
        }

这两个vbs文件,在教程十三里面有提供。 最后在检查一次mst文件就是确保mst文件的存在。变形文件是我们多语言安装包的关键。

  /// <summary>
        /// 生成变形文件
        /// </summary>
        /// <param name="p"></param>
        private static void GetTransforms(Process p)
        {
            ExcComand(p, CommandLines.EnToZh);
            ExcComand(p, CommandLines.EnToTw);
            ExcComand(p, CommandLines.ZhToEn);
        }

        private static void ExcComand(Process p, string command)
        {
            p.StandardInput.WriteLine(command);
            Console.WriteLine("command:" + command);
            Thread.Sleep(1500);
        }
View Code

而commandLines 这个类里面就包含了这次所会用到的命令。

public  class CommandLines
  {
      //对应繁体
      public static string LanZh_TW = @"WixSubStg.vbs zh-cn\DIAViewSetup.msi  transforms\zh-tw.mst 1028";
      //对应中文
      public static string LanZh_CN = @"WixSubStg.vbs zh-cn\DIAViewSetup.msi transforms\zh-cn.mst 2052";
      //对应英文
      public static string LanEN_US = @"WixSubStg.vbs zh-cn\DIAViewSetup.msi transforms\en-us.mst 1033";

      //合成语言安装包 ,默认是中文
      public static string CombanLanZh_cn = @"WiLangId.vbs zh-cn\DIAViewSetup.msi Package 1028,2052,1033";
      //测试繁体安装包
      public static string Testzh_Tw = @"msiexec /i  zh-cn\DIAViewSetup.msi TRANSFORMS=transforms\zh-tw.mst";
      //测试中文安装包
      public static string Testzh_Cn = @"msiexec /i  zh-cn\DIAViewSetup.msi TRANSFORMS=transforms\zh-cn.mst";
      //测试英文安装包
      public static string Testen_US = @"msiexec /i  zh-cn\DIAViewSetup.msi TRANSFORMS=transforms\en-us.mst";

      //生成英文资源
      public static string EnToZh = @"torch.exe -t language en-us\DIAViewSetup.msi zh-cn\DIAViewSetup.msi -out transforms\zh-cn.mst";
      //生成中文资源
      public static string EnToTw = @"torch.exe -t language en-us\DIAViewSetup.msi zh-tw\DIAViewSetup.msi -out transforms\zh-tw.mst";
      //生成繁体资源
      public static string ZhToEn = @"torch.exe -t language zh-cn\DIAViewSetup.msi en-us\DIAViewSetup.msi -out transforms\en-us.mst";
  }
View Code

最后的执行结果如下。 这里是以zh-cn为基础。合成之后的安装包就可以根据系统环境自动切换语言,如果不是关联的语言之一就显示默认语言。

 当然,主要的目的是可以让他可以根据用户的选择来显示不同的语言界面。

 

目录
相关文章
|
3月前
|
移动开发 小程序 数据可视化
DIY可视化导出源码整合uniapp环境搭建+调试+运行发布
DIY可视化导出源码整合uniapp环境搭建+调试+运行发布
78 0
|
5月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
388 0
|
8月前
|
SQL 分布式计算 前端开发
2024年最全用python写一个自动生成春联的软件,打包exe,2024年最新阿里p8面试题和答案
2024年最全用python写一个自动生成春联的软件,打包exe,2024年最新阿里p8面试题和答案
2024年最全用python写一个自动生成春联的软件,打包exe,2024年最新阿里p8面试题和答案
|
8月前
|
开发框架 JSON .NET
初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试
初学者不会写接口怎么办?微软Visual Studio 2022无脑式API接口创建——Swagger一键导入APIKit快速测试
407 0
|
Windows
FL STUDIO21软件最新版新主题、插件、功能介绍
大家常说的“DJ音乐”实际应该指的是EDM音乐,现在市面上的宿主软件几乎都可以制作EDM音乐。DJ音乐制作要学多久?可长可短,想要学精一门艺术和技术至少需要一两年时间。FL STUDIO21软件下载如下:http://t.csdn.cn/3irxK
186 2
|
自然语言处理
Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议
原文:Wix 安装部署教程(十四) -- 多语言安装包之用户许可协议          在上一篇中,留下了许可协议的问题,目前已经解决。感谢网友武全的指点! 问题          一般我们是用WixVariable 来设定许可协议。
1082 0
|
自然语言处理 数据库 Windows
Wix 安装部署教程(十三) -- 多语言安装包
原文:Wix 安装部署教程(十三) -- 多语言安装包       这几天摸索WIX的多语言安装包(这里是Wix的setup 工程,不是Bundle),终于走通了,感谢网友uni的指点。WIX的多语言安装包能够根据系统环境自动切换界面语言,你也可以通过命令指定语言。
1854 0
|
Java 数据库连接 数据库
最新版IDEA配置常用工具模板
在使用 InelliJ IDEA 的过程中,如果能熟练的配置常用模块应用于实际开发过程中,效率将大大提高!!! Try it !
198 0
最新版IDEA配置常用工具模板
|
Kubernetes IDE JavaScript
IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频
IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频
2159 0
IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频
|
Android开发
开发笔记5 | 阿里云Eclipse插件安装与使用(视频演示)
快速体验 安装指南 阿里云开发者工具交流 钉钉群
1261 0