zoukankan      html  css  js  c++  java
  • 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-cnDIAViewSetup.msi  transformszh-tw.mst 1028";
          //对应中文
          public static string LanZh_CN = @"WixSubStg.vbs zh-cnDIAViewSetup.msi transformszh-cn.mst 2052";
          //对应英文
          public static string LanEN_US = @"WixSubStg.vbs zh-cnDIAViewSetup.msi transformsen-us.mst 1033";
    
          //合成语言安装包 ,默认是中文
          public static string CombanLanZh_cn = @"WiLangId.vbs zh-cnDIAViewSetup.msi Package 1028,2052,1033";
          //测试繁体安装包
          public static string Testzh_Tw = @"msiexec /i  zh-cnDIAViewSetup.msi TRANSFORMS=transformszh-tw.mst";
          //测试中文安装包
          public static string Testzh_Cn = @"msiexec /i  zh-cnDIAViewSetup.msi TRANSFORMS=transformszh-cn.mst";
          //测试英文安装包
          public static string Testen_US = @"msiexec /i  zh-cnDIAViewSetup.msi TRANSFORMS=transformsen-us.mst";
    
          //生成英文资源
          public static string EnToZh = @"torch.exe -t language en-usDIAViewSetup.msi zh-cnDIAViewSetup.msi -out transformszh-cn.mst";
          //生成中文资源
          public static string EnToTw = @"torch.exe -t language en-usDIAViewSetup.msi zh-twDIAViewSetup.msi -out transformszh-tw.mst";
          //生成繁体资源
          public static string ZhToEn = @"torch.exe -t language zh-cnDIAViewSetup.msi en-usDIAViewSetup.msi -out transformsen-us.mst";
      }
    View Code

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

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

  • 相关阅读:
    mybatis 框架 的应用之四(一对一 与 一对多)
    mybatis 框架 的应用之三(操作两张没有关联的表,存在主键和外键关系)
    mybatis 框架 的应用之二(批量添加、实现分页查询)
    hibernate 框架的简单使用
    Java c3p0 连接 MySQL
    Oracle 复制表
    web 应用中访问 Spring 具体实现
    oracle 创建表 外键约束
    oracle 通过序列实现某字段自增
    Swift数组的sort、filter、forEach、map等方法,$的使用
  • 原文地址:https://www.cnblogs.com/stoneniqiu/p/4931142.html
Copyright © 2011-2022 走看看