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.0\SDK\Bootstrapper\Packages”。在這個目錄中,
您可很清楚地看到在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="HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\InstallRoot" Value="Path" FileName="1033\ACEODBCI.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>元素來檢查,用“HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\InstallRoot”這個注冊表鍵來判斷檢查,
並給這個檢查項目起個名字叫“ACEVERSION”。
<Command>元素則是在<InstallConditions>元素指定的條件滿足時,執行相應的組件安裝程序
,這里我的安裝程序是“AccessDatabaseEngine.exe”,是一個普通的安裝程序,沒有參數。
<InstallConditions>元素我的理解就是指定安裝條件啦,<BypassIf Property="ACEVERSION" Compare="ValueExists"/>一句我的想法是:
如果注冊表存在這個鍵就認為已經安裝了客戶端,就不用執行精簡客戶端安裝,否則視為沒有安裝,就要執行。
(3)配置完畢!
我們到VS2015部署程序的系統必備選擇項中找找,果真發現了“Data Connectivity Components”這個組件了。如下圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM