使用WiX製作具有時間限制的安裝包

WiX是Windows Installer XML的簡稱,它是用於製作Windows安裝包的工具集。它支持命令行環境,開發者可以及將它集成到他們的編譯過程中創建MSI和MSM安裝包。

更多信息可以參考:http://wix.sourceforge.net/

 

最近研究了一下如何使用WiX製作具有時間限制的安裝包,下圖是demo的效果圖。

clip_image002

完成這個demo主要有兩點值得注意:

1. 選擇合適的腳本語言(VBScript or JScript)實現定製操作。

2. 選擇合適的實際執行上面的腳本。

 

下面分享我的實現過程:

1. 實現一段檢查當前時間是否越界的腳本代碼,並將它封裝到CustomAction中。

    使用VBScript比較當前日期和限定日期,小於0表示越界,這時調用WScript想註冊表添加壞鍵。

 

  1. <CustomAction Id="ValidateTimeLimitCA" Script="vbscript" Execute="immediate" > 
  2.     <![CDATA[ 
  3.     If DateDiff("d", Date, #2011/07/31#) < 0 Then 
  4.       Set WShell = CreateObject("WScript.Shell") 
  5.       WShell.RegWrite "HKCU\Software\GrapeCity\TimeLimit\DateDiff", 1, "REG_DWORD" 
  6.       Set WShell = Nothing 
  7.     End If 
  8. ]]> 
  9.   </CustomAction> 

2. 選擇合適的時機執行上述腳本,越早越好。

    在本文的demo中,我在PrepareDlg之前執行腳本,對於大多數情況而言,這已經是最早的時機了。當然,你也可以選擇在AppSearch之前執行。

 

  1. <InstallUISequence> 
  2.   <Custom Action="ValidateTimeLimitCA" Before="PrepareDlg" /> 
  3. </InstallUISequence> 

3. 添加一個RegistrySearch屬性,用於第一步提到的壞鍵。

 

  1. <Property Id="TIMELIMIT"> 
  2.   <RegistrySearch Id="TIMELIMIT_VALUE" Root="HKCU" Key="Software\GrapeCity\TimeLimit" Name="DateDiff" Type="raw" /> 
  3. </Property> 

4. 添加Condition用於檢查第三步添加的屬性是否存在,並在需要的時候彈出錯誤信息。

 

  1. <Condition Message="This is package is out of date at July 31, 2011"> 
  2.     Installed OR NOT TIMELIMIT 
  3.   </Condition> 

5. 實現一個清除操作,用於清除第一步添加的壞鍵。

 

  1. <CustomAction Id="CleanupTimeLimitCA" Script="vbscript" Execute="immediate" > 
  2.   <![CDATA[ 
  3.   Set WShell = CreateObject("WScript.Shell") 
  4.   WShell.RegDelete "HKCU\Software\GrapeCity\TimeLimit\" 
  5.   Set WShell = Nothing 
  6. > 
  7. </CustomAction> 

6. 在FatalError對話框中發佈Finish事件,同時將值設置給第五步提到的清除操作。

 

  1. <UI> 
  2.   <UIRef Id="WixUI_Minimal" /> 
  3.   <Publish Dialog="FatalError" Control="Finish" Event="DoAction" Value="CleanupTimeLimitCA">1</Publish> 
  4. </UI> 

 

到這裏就完成,代碼很簡單,希望有價值。

 

源碼下載地址如下:

TimeLimit.rar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章