September 27, 2013

WiX中加入.NET Framework版本檢查

WiX來打包安裝檔(如*.msi)時,常會希望安裝過程中可以先檢查主機環境是否符合特定需求再進行安裝,例如.NET Framework版本是否能執行欲部署的應用程式,如果不符則顯示警告訊息給應用程式使用者並中止安裝。

在WiX中若要進行.NET Framework版本的檢查,需要借助WiX所提供的延伸函式庫WixNetFxExtension.dll。我的作業系統環境為Windows 7 Professional x64 SP1,安裝的WiX Toolset版本為3.7,預設安裝路徑為C:\Program Files (x86)\WiX Toolset v3.7,延伸函式庫則存放在bin資料夾下。

以下為設定步驟

將WixNetFxExtension.dll加入參考


上圖為SharpDevelop上開啟WiX專案的畫面,目前我是以SharpDevelop來編輯WiX設定檔。


設定檔中根節點Wix中加入命名空間xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension",如
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
  xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">


Wix/Product/Package節點後加入以下兩個節點,如下為檢查.NET Framework 4.0是否已安裝在系統上,NETFRAMEWORK40FULL代表檢查的是.NET Framework 4.0版本,詳細可使用的版本列表可參考WixNetfxExtension;而Installed則代表檢查是發生在安裝MSI檔時而非修復或移除時。
<PropertyRef Id="NETFRAMEWORK40FULL"/>
<Condition Message="請先安裝Microsoft .NET Framework 4.0再安裝此軟體">
    <![CDATA[Installed OR NETFRAMEWORK40FULL]]>
</Condition>

例如
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
 <Product Id="8CB51EE0-0F1C-4185-90BC-11B865F4CFD5" Name="Demo Application" Language="1028" Codepage="950" Version="1.0.0.0" Manufacturer="Pete Chen" UpgradeCode="A887890D-18A1-437A-95D4-0836AC792366">
  <Package InstallerVersion="200" Compressed="yes" Languages="1028" Manufacturer="Pete Chen" Description="Demo Application" SummaryCodepage="950" />
  <PropertyRef Id="NETFRAMEWORK40FULL"/>
  <Condition Message="請先安裝Microsoft .NET Framework 4.0再安裝此軟體">
      <![CDATA[Installed OR NETFRAMEWORK40FULL]]>
  </Condition>

這邊要注意的是,PropertyRef及Condition節點一定要放在Package節點之後,否則無法建置WiX成功,因為根據XSD (C:\Program Files (x86)\WiX Toolset v3.7\doc\wix.xsd)的定義,Product節點後的第一順位為Package節點。


設定完成後建置出MSI檔並安裝在無安裝.NET Framework 4.0環境的主機,可以看到系統會出現警告視窗並停止安裝動作。



延伸閱讀


No comments: