zoukankan      html  css  js  c++  java
  • VS2015 打包添加系统必备组件

    有时我们除了需要安装系统必备组件之外,还需要做自定义的子安装程序,如我的需要安装2007 Office System Driver: Data Connectivity Components!现将操作步骤整理如下,希望能对如我一般陷此困惑的朋友有所帮助,或能抛砖引玉!
    (1)将自定义的安装程序COPY至Bootstrapper文件夹中
    VS2015(不同vs版本有不同的Bootstrapper目录)的系统必备项是用特定文件路径和xml描述文件一起构成的,这点倒是和JAVA应用服务器很像。这个Bootstrapper是具体路径在我的机器中是:
    “C:Program Files (x86)Microsoft Visual Studio 14.0SDKBootstrapperPackages”。在这个目录中,
    您可很清楚地看到在VS2015部署程序中可选的所有的组件,呵呵。我们要依葫芦画瓢同样建一个文件夹“Data Connectivity Components”这样的系统必备组件。
    名称就起“Access Database Engine”好了。如下:

    在“Data Connectivity Components”文件夹中,断续建一个“en”安装本地化文件夹(中国的建zh-CHS),将安装程序COPY进这个文件夹中,如:
     
    (2)创建产品清单和程序包清单
    产品清单其实就是“Data Connectivity Components”文件夹下的那个product.xml文件;程序包清单其实就是“en”文件夹下的package.xml文件
    Product.xml文件的清单如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <Product
       	xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
       	ProductCode="AccessDatabaseEngine" >
      <!-- Defines list of files to be copied on build -->  
    </Product>
    

      


    这倒没什么可说的,
    Package.xml文件的清单如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Package Name="DisplayName" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
    
      <InstallChecks>
        <RegistryFileCheck Property="ACEVERSION" Key="HKLMSOFTWAREMicrosoftOffice12.0Access Connectivity EngineInstallRoot" Value="Path" FileName="1033ACEODBCI.DLL" />
      </InstallChecks>
    
    
      <PackageFiles CopyAllPackageFiles="false">
        <PackageFile
    		  Name="AccessDatabaseEngine.exe"
    		  HomeSite="HomeSiteName_32"
    		  />
      
      </PackageFiles>
    
      <Commands Reboot="Defer">
        <Command PackageFile="AccessDatabaseEngine.exe">
          <InstallConditions>       
            <BypassIf Property="ACEVERSION" Compare="ValueExists"/>       
          </InstallConditions>
          <ExitCodes>
            <ExitCode Value="0" Result="Success" />
            <DefaultExitCode Result="Fail" String="Anunexpected" FormatMessageFromSystem="true" />
          </ExitCodes>
        </Command>   
      </Commands>
    
      <Strings>
        <String Name="Culture">EN</String>
        <String Name="DisplayName">Access Database Engine</String>
        <String Name="HomeSiteName_32">http://downloads.hotdocs.com/downloads/hd11/player/HotDocs_Player_11_32bit.exe</String>    
        <String Name="AdminRequired">You do not have the permissions required to install this application.  Please contact your administrator.</String>
        <String Name="Anunexpected">An unexpected exit code was returned from the installer. The installation failed.</String>
      </Strings>
    
    </Package>
    

      


    Package 元素的 Name 属性的值 其实就是 在VS2015部署程序的系统必备选择框中显示的组件名称。
    <PackageFiles>元素用来指定组件包括的文件,要将每个安装文件要用子元素<PackageFile>指定出来哦,VS2015部署程序在编译生成安装文件时,
    就是按这个清单将组件的文件COPY过去的。
    <InstallChecks> < Commands >这两个元素是要配对的,和struts框架的控制文件一样,它们的主要作用就是利用注册表项或文件来判断组件是否需要安装。
    我是用注册表来判断驱动是否已经在客户端上安装,就需要用<RegistryCheck>元素来检查,用“HKLMSOFTWAREMicrosoftOffice12.0Access Connectivity EngineInstallRoot”这个注册表键来判断检查,
    并给这个检查项目起个名字叫“ACEVERSION”。
    <Command>元素则是在<InstallConditions>元素指定的条件满足时,执行相应的组件安装程序
    ,这里我的安装程序是“AccessDatabaseEngine.exe”,是一个普通的安装程序,没有参数。
    <InstallConditions>元素我的理解就是指定安装条件啦,<BypassIf Property="ACEVERSION" Compare="ValueExists"/>一句我的想法是:
    如果注册表存在这个键就认为已经安装了客户端,就不用执行精简客户端安装,否则视为没有安装,就要执行。
    (3)配置完毕!
    我们到VS2015部署程序的系统必备选择项中找找,果真发现了“Data Connectivity Components”这个组件了。如下图:

     
  • 相关阅读:
    Java 打印金字塔 or 打印带数字的金字塔 (Java 学习中的小记录)
    Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)
    C语言基础中,进制之间的转换
    Java 需要记得、了解的关键词 (Java 学习中的小记录)
    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)
    Java学习中,常用的命令管理(Java 学习中的小记录)
    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)
    html/css 盒子布局 Margin 、Padding 、border 以及 清除浮动的知识 (学习HTML过程中的小记录)
    Flutter json轉換Map
    Flutter dio獲取數據顯示到listview中
  • 原文地址:https://www.cnblogs.com/fire_to_fire/p/7692056.html
Copyright © 2011-2022 走看看