使用VS2010和WiX 3.0開發託管自定義操作
通過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/
-->[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/
--><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/
--><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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com微信小程式
- C#:委託和自定義事件C#事件
- TDengine 3.0 中如何編譯、建立和使用自定義函式編譯函式
- C# 託管資源和非託管資源C#
- SharePoint 2013 開發——開發自定義操作APPAPP
- C# 自定義事件和委託(精彩轉載)C#事件
- 使用GitHub託管專案Github
- vue中使用高德地圖自定義開發Vue地圖
- vue3.0自定義指令(drectives)Vue
- 託管堆和垃圾回收(GC)GC
- 伺服器託管中U的含義伺服器
- 開源託管站點大全
- 重學c#系列——c# 託管和非託管資源(三)C#
- Qt自定義外掛plugin的開發和呼叫QTPlugin
- VS2010自定義模版全過程
- 託管與非託管的混合程式設計程式設計
- 直播平臺開發,TabLayout的使用和自定義紅點訊息提示TabLayout
- 翻譯 - ASP.NET Core 託管和部署 - 在 Linux 上使用 Nginx 託管 ASP.NET Core 網站ASP.NETLinuxNginx網站
- MySQL使用之五_自定義函式和自定義過程MySql函式
- Vue 3自定義指令開發Vue
- Java自定義註解開發Java
- 使用ArcEngine開發自定義Tool併發布為GP服務
- Android開發教程 - 使用Data Binding(八)使用自定義InterfaceAndroid
- FlinkSQL自定義函式開發SQL函式
- iOS開發 AVFoundation自定義相機iOS
- Android開發之自定義SpinnerAndroid
- iOS開發使用UIKeyInput自定義密碼輸入框iOSUI密碼
- 個性化定義多個 Git 託管平臺配置Git
- js 建立和觸發事件 和 自定義事件JS事件
- 重學c#系列——c# 託管和非託管資源與程式碼相關(四)C#
- 雲託管已支援一鍵搭建服務商開發環境開發環境
- ASP.NET Core 託管和部署(一)【Kestrel】ASP.NET
- 【安卓筆記】使用DialogFragment託管dialog安卓筆記Fragment
- 伺服器託管伺服器
- Oracle 託管檔案Oracle
- 華為開發者 雲託管
- 伺服器託管是什麼意思,為什麼要託管?伺服器
- WordPress開發入門08:自定義函式和WordPress鉤子函式