使用VS2010和WiX 3.0開發託管自定義操作

iDotNetSpace發表於2009-02-17
【IT168 技術文件】Visual Studio 2010將會配備WiX 3.0。相對於當前使用的Visual Studio安裝專案,Wix更加靈活。而且它支援託管程式碼和Windows Installer進行互動。程式設計師可以使用C#、VB.NET或其他任何.NET程式語言。它也支援除錯,這個曾讓安裝建立者頭痛的問題。

  通過WiX的釋出工具基礎(Deployment Tools Foundation,DTF)來支援託管自定義操作(CA's),開發人員不再需要使用C++或者指令碼語言(VB Script或JavaScrip)編寫CA's。DTF可以使用msi.dll中的託管.NET包裝,讓使用者訪問完整的MSI API。用C#編寫的CA方法如下所示:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt[CustomAction]
public static ActionResult CustomActionName(Session session)
{
...
}

  CustomAction特性用於標識該方法為CA。Session物件讓開發人員訪問Windows Installer API,它可以查詢MSI資料庫、訪問屬性等等。這和過去用指令碼和C++程式碼編寫的CA’s非常類似。

  要在WiX中使用前面的CA,必須註冊WiX專案,程式碼如下所示:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt<CustomAction Id="someID" BinaryKey="someKey" DllEntry="customActionName" Execute="immediate"  Return="check" />
<Binary Id="someKey" SourceFile="someCustomAction.CA.dll" />
UISequence中執行CA,如下所示:

<InstallUISequence>
<Custom Action="someID" After="CostFinalize" Overridable="yes">NOT InstalledCustom>
InstallUISequence>

  WiX 3.0也給所有的WiX使用者提供系列預設操作,事實上它們都是CA's。下面列舉部分可用的預設操作:

  IIS
  Com+
  MSMQ
  SQL
  WiX 3.0文件中有詳細的資訊.

下面的例子顯示了IIS中建立新Web站點的Wix原始碼:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gt<iis:WebSite Id='DefaultWebSite' Description='Default Web Site'>
<iis:WebAddress Id='AllUnassigned' Port='80' />
iis:WebSite>

  很多開發人員都詢問Windows Installer團隊為什麼不支援託管自定義操作。Wix的開發組長Rob Mensching解釋道:

  一年前,我、Carolyn (MSI Dev經理)和兩位Windows架構師討論過託管程式碼自定義操作,並把最終的結果釋出到部落格上。博文提出了兩個問題。第一個是技術問題,即託管程式碼自定義操作需要執行在單獨的執行緒中。第二個問題是Windows平臺制定了減少自定義操作的戰略目標。我釋出那篇博文的時候,DTF就是面臨著這兩個問題。釋出博文的一個月以後,Jason解決了當中的技術難題,通過實現程式間通訊機制把託管自定義操作轉移到單獨的程式中,但仍可以和Windows Installer通訊。

  2009版的InstallShield也支援自定義託管操作,針對Rob提出的兩個問題有著不同的解決方案,但是不支援除錯。Christopher Painter談到他認為DTF更好用的原因:

  通過合適的CLR版本,DTF解決了分離msi程式的難題
  MakeSfxCa在依賴性方面更加靈活和直觀
  從C#開發人員的角度來說,MSI互操作物件模型更好用

  可對主程式進行除錯
  開發原始碼更易於發現問題和解決問題,儘管需要我們自己動手
沒有使用上的限制。它有多種使用方式,我們可以建立和使用自定義操作,包括整合到InstallShield(這正是我在嘗試的方式)。
WiX 3.0即將釋出。當前仍需修正一些Bug ,同時等待Visual Studio小組以便和Visual Studio的附加程式Votive進行整合。最新的版本是3.0.5006.0,我們也可以下載每週編譯版本 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-553518/,如需轉載,請註明出處,否則將追究法律責任。

相關文章