博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Visual Studio DSL 入门 14---用Wix制作安装程序
阅读量:7064 次
发布时间:2019-06-28

本文共 3439 字,大约阅读时间需要 11 分钟。

  我们到现在为止已经对Vs.net  dsl的基础知识进行了介绍,并且一步一步的完成了我们的状态机设计器的设计,在上一节结合T4模板生成了代码.但是我们一直还是在调试的项目中来做的,怎么能够让我们做的这个状态机设计器能够提供给其它人使用呢,在这一节,我们就来做一个安装程序,这样在只安装了VS.NET的机器上,不用安装SDK就可以使用我们的设计器了.

    VS.NET DSL专门提供了针对DSL的安装项目,我们直接基于这个项目来制作我们的安装程序:
    1.首先,向我们的解决方案中添加一个Dsl 安装项目,从项目类型中选择Extensibility—Domain Specific Language Setup:
      

    2. 我们可以看到在生成的项目中, 还是由很多tt文件, 其实dsl的安装是基于开源项目wix,不过在一般情况下,我们不需要手动去修改wix文件,不过如果一旦有特殊的需求,现有的这种机制是很难满足的. 我们来介绍一下这种安装机制:

       当我们向这个解决方案中添加DSL setup项目时,它会自动的寻找Dsl项目和DslPackage项目,并自动添加对这两个项目的引用,然后根据这两个项目中生成自己的元数据文件InstallerDefinition.dslsetup,我们来看一下这个文件:

隐藏行号 复制代码
  1. productUrl="InsertProductUrlHere"
  2. defaultDirectoryName="LanguageSm"
  3. productVersion="1.0.0"
  4. requiresCSharp="true"
  5. requiresVisualBasic="true"
  6. productCode="326b807c-a6da-43ac-9d29-f75cf060622a"
  7. upgradeCode="cc04b782-48c3-49c5-a60e-eda39258bfaa"
  8. localeId="1033">

         (1).根结点installerDefinition下面是全局的定义,包括产品URL,目录名称,版本,是否在安装需要vs.net安装c#或者是BisualBasic等,在这里我们注意需要把requireVisualBasic设置为false.

         (2).dslPackge结点是对我们的dsl的一些注册信息,这些信息都来自于我们的DslDefinition.dsl文件,不过我们这里可以对这些信息进行一些修改.
         (3).licenseAgreement  许可协议文件,这会在安装过程中显示出来.
         (4).supportingFiles, 需要复制到安装目录的文件列表
         (5).vsItemTemplates   项目项模板,是在项目中新增项的时候的,而不是说我们生成代码的tt模板,也不是说新增项目的模板 , localeId是区域id,你可以根据你的vs.net语言版本改成2052
      
    下面再来看一下生成的其它几个文件:
    

     Main.wxs       这是wix的主文件,控制整个安装流程,包括对以下几个部分的引用.

     Files.wxs       需要在安装目录创建的目录结构和文件  包括dll和附属文件
     Registry.wxs    注册项信息,需要写入注册表的项
     UI.wxs          安装界面
     string.wxs     被其它部分使用的语言的键值对,如果需要多语言支持,可以再添加对应语言的文件,比如string_zh-cn.wxs
     
     除了string.wxs文件,其它的几个文件都是由tt文件生成的,不要手动去修改,即使修改了重新转换模板时也会被覆盖掉.
     3.我们暂时不需要做一些高级功能,现在先重新生成模板,然后编译整个安装项目:

隐藏行号 复制代码
  1. D:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Wix\candle.exe -dConfiguration=Debug -out obj\Debug\ -w0 -v Files.wxs Registry.wxs Main.wxs UI.wxs
  2. D:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Wix\light.exe -b F:\NET\Projects\LanguageSm\LanguageSmSetup -loc Strings.wxl -out bin\Debug\LanguageSm.msi -sa -w0 -v obj\Debug\Files.wixobj obj\Debug\Registry.wixobj obj\Debug\Main.wixobj obj\Debug\UI.wixobj

    可以看到其实是调用了sdk中附带的wix的candle命令来生成. 编译完成后,在setup项目下的debug目录下面,可以找到生成的exe文件,我们点击安装:

     

    接下来就是许可协议rtf文件的内容,同意后点下一步:
   
    这一步选择我们的安装目录:
     
    选择完目录后,直接下一步,直接到完成安装,我们新建一个类库项目,添加项时就会看到我们的LanguageSm:
   

   添加后我们就可以和我们调试项目的时候一样进行状态机的设计了.不过生成代码的功能暂时还没有加进来.

    4.不过当你把这个生成的安装文件给没有安装过Visual stuido.net SDK的机器安装后,你会发现,没有作用,要让dsl能够直接在vs.net上安装,你还必须要有自己的PLK(Package Load Key).
      (1)登陆vsx的网站,左下角的就是plk的注册信息,这些信息来源于你的DslDefinition.dsl的根结点的属性:
  

      (2)填写完这些信息完,点击生成PLK,会生成一串的字母.然后打开DslPackage项目下面的VSPackage.resx文件,添加一个键为1的字符串资源,值就是生成的PLK GUID.

 
      (3)打开DslPackage项目GeneratedCode文件夹下面的Package.tt文件,将下面这句用来加载PLK的属性标记的注释去掉:

隐藏行号 复制代码
  1. /// [VSShell::ProvideLoadKey("Standard", Constants.ProductVersion, Constants.ProductName, Constants.CompanyName, 1)]

       (4)保存文件,重新转换模板,再编译dslsetup项目生成exe文件,这次就可以直接在未安装sdk的机器上安装使用了.

   5. 即使你可能觉得Dsl setup安装项目还是很强大的,不过我还是需要说明以下几点:

       (1)使用wix结合t4制作dsl安装项目,虽然简单,但是有失灵活性,如果你想扩展在使用现有的这种方式会有些麻烦除非你脱离开T4,就直接使用wix来完成.
       (2)使用wix,就是把注册表操作,复制文件操作,多语言处理,安装界面和流程处理等通过它特有的xml和扩展机制来实现,你完全可以不用这种机制,不用dsl setup项目,而使用自己的安装方式.  比如直接新建普通的安装项目或者是使用installshiled.
       (3)很高兴的看到,在vs 2010中的关于dsl的安装已经不使用wix了,而是通过新的扩展管理器来加载.

 

 

参考资源

      1. Visual Stuido DSL 工具特定领域开发指南
      2. DSL Tools Lab       系列教程  [本系列的入门案例的主要参考]

作者:()

出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类:
标签: , ,
本文转自孤独侠客博客园博客,原文链接:http://www.cnblogs.com/lonely7345/archive/2010/03/16/1686765.html,如需转载请自行联系原作者
你可能感兴趣的文章
Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
查看>>
linux shell单引号、双引号及无引号区别(考试题答案系列)
查看>>
625某电商网站数据库宕机故障解决实录(下)
查看>>
创业公司感悟录之十个提醒—作者李天平
查看>>
.NET Project Open Day(2011.11.13)
查看>>
centos 记录用户行为轨迹
查看>>
各角色眼中的性能测试
查看>>
Citrix XenDesktop 引发的学案(四)-与“您的虚拟桌面”之间的连接失败,状态(1030)...
查看>>
mysql-5.6的GTID复制的实现
查看>>
6421B Lab10 网络文件和打印服务的配置与故障排除
查看>>
快速安装配置zabbix_agent端
查看>>
DNS服务的配置与管理(5) 配置转发器
查看>>
AIP(Azure 信息保护)之一:启用与激活服务
查看>>
一步步学WebSocket(3)WebSocket协议格式
查看>>
linux更新内核
查看>>
通过mdadm命令调用内核MD模块实现软Raid
查看>>
为RemoteApp的登录用户(域用户)添加输入法的方法
查看>>
分享Open-E DSS V7 应用系列十篇!
查看>>
分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日)
查看>>
javascript框架概览备忘
查看>>