#installation
下載下傳最新版本的WIX toolset 并安裝
DOWNLOADWix toolset V3.5之後的版本已經可以內建到visual studio,我們可以直接在vs中編寫代碼,并借助vs進行編譯。
#demo
首先打開 Visual Studio,然後選擇建立WIX Setup Project. 建立完成之後的在項目中我們可以看到一個名為
Product.wxs
的檔案,其代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="8e1efb05-1e12-40e5-abca-c8bd7965bf2a">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="SetupProject1" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="SetupProject1" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
<!-- <Component Id="ProductComponent"> -->
<!-- TODO: Insert files, registry keys, and other resources here. -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
</Wix>
屬性介紹:
1. UpgradeCode 标簽中的 UpgradeCode 是産品的版本id。産品的更新解除安裝全部要用到它,一旦指定之後就不要修改。
2. product标簽中的 id 是該産品目前版本的id。它每次在更新版本的時候都需要改變。
3. Directory 定義産品安裝目錄的目錄結構
4. Feature 産品的功能清單
5. MajorUpgrade 防止産品降級安裝。
6. Manufacturer 公司或者組織名稱
#file
項目建立完成之後,我們需要往安裝包裡面添加檔案。WIX添加檔案的方法很友善,直接使用
<File Source="檔案路徑" />
就可以把一個檔案添加到安裝包中來。
檔案路徑
可以用絕對路徑和相對路徑來表示,在Wix中相對路徑的可能需要用到變量。例如:
$(var.ReferencedProjectName.TargetDir) 表示項目中引用的另一項目‘ReferencedProjectName‘的輸出路徑
$(env.WIXPATH) 表示系統的環境變量WIXPATH所指向的路徑。
關于其它的表示方法請大家參閱官網。
在這裡我們在項目中添加一個檔案夾
resource
, 并在這個檔案夾下添加一個
TextFile1.txt
,然後在上述代碼中的
//todo
注釋的下面添加如下代碼
<Component Id="ProductComponent" Guid="7B428173-1277-482B-BC2E-CC008F3B79F9">
<File Source="resource/TextFile1.txt" />
</Component>
然後指定
Manufacturer
後就進行編譯,編譯成功之後進行安裝,之後大家在
c:/programfiles(X86)/SetupProject1
的目錄下就可以看到
TextFile1.txt
檔案了。就這樣一個簡單的安裝包就制作成功了。 但是這一一個簡單的安裝包絕對不能滿足我們日常的工作需要。下面我将為大家介紹如何實作一些另外的操作
#directory
自定義安裝目錄結構。修改directory結構目錄為如下
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir"
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="SetupProject1">
<Directory id="LOG" name="log"/>
<Directory id="DATA" name="data"/>
</Directory>
</Directory>
</Directory>
</Fragment>
然後重新編譯安裝。就會發現安裝之後的目錄結構已經變成了如下
-ProgramFiles(x86)
--SetupProject1
---log
---data
#ui
WIX預設為我們提供了五種UI類型。關于每種UI的樣式。請大家自己嘗試或者檢視文檔。
- WixUI_Advanced Dialog Set
- WixUI_FeatureTree Dialog Set
- WixUI_Minimal Dialog Set
- WixUI_Mondo Dialog Set
- WixUI Dialogs
如果我們要引用任一UI,我們隻需要在
product.wxs
檔案中添加如下代碼
<UIRef id="WixUI_Advanced"/>
- 1
然後編譯運作,就會看到UI已經發生了改變。如果需要自定義UI則需要重新編寫一個UI,然後添加到
WixUI_Advanced
的 UI Sequence中去.(請見下一篇)
#action
WIX 允許我們自定義Action。如果需要自定義Custom Action,我們需要另外建立一個類型為
C# Custom Action Project
的項目。建立成功後,在項目中添加一個
CustomAction.cs
然後編輯代碼如下:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Deployment.WindowsInstaller;
namespace CustomAction1
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("Begin CustomAction1");
return ActionResult.Success;
}
}
}
這樣一個自定義的方法就定義好了。然後編譯項目。該項目編譯成功之後會有兩個輸出檔案
CustomAction.dll
和
CustomAction.CA.dll
. 其中以
CA.dll
結尾的檔案才是我們所需要的檔案。 然後我們把CustomAction項目添加到之前建立的項目的引用中去。然後添加檔案
customAction.wxs
并添加如下代碼
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<Binary Id="BINARYFILE" SourceFile="$(var.CustomAction.TargetDir)CustomAction1.CA.dll" />
<CustomAction Id="CustomAction1" BinaryKey="BINARYFILE" DllEntry="CustomAction1" />
</Fragment>
</Wix>
這樣一個CustomAction就建立并引入成功了。下面我們就可以調用這個方法了。在WIX中Action的執行時有順序的。如果我們要添加一個自定義事件,我們必須要指定它在什麼事件之前或者之後執行,見如下代碼,關于WIX的事件順序請參考
事件順序<InstallExecuteSequence>
<Custom Action="CustomAction1" After="InstallFiles"/>
</InstallExecuteSequence>
上述代碼指定了在
InstallFiles
方法執行完成之後立馬執行
CustomAction1
. 就這樣,一個自定義的方法就定義成功,并且被成功調用了。
利用自定義的CustomAction我們可以做一些自定義操作。比如寫log檔案或者其它。
下一篇我将為大家介紹如何使用WIX制作自定義界面,并且将自定義界面添加到UI序列中去