摘要本文討論如何使用Windows Installer技術發布.NET程序,以及如何使用native代碼判斷目標機器上是否安裝有.NET Framework; 如果沒有,將自動安裝.NET Framework然後安裝作者自己的.NET程序。
-------------------------------------------------- ------------------------------
目錄本文內容製作自己的安裝程式發布.NET Framework
製作自己的native安裝程式使用方法總結作者
---------------------------------------- ----------------------------------------
本文內容
1. 使用VS.NET來製作安裝程式。
2. 如何把.NET Framework 部署到目標機器。
3. 如何使用Native程式碼把.NET Framework和自己的安裝程式製作為一個統一的安裝程式。程式做到如果目標機器上沒有.NET Framework,就會自動安裝.NET Framework然後再自動安裝作者自己的程式。
-------------------------------------------------- ------------------------------
製作自己的安裝程式在VS.NET中,我們可以透過建立"Setup and Deployment Projects "項目,非常靈活方便的把自己的.NET程式製作為Windows Installer檔案。例如,我們可以很方便的客製化下面這些選項:
1. 是否在桌面上放置捷徑。
2. 註冊自己的文件類型,可以透過雙擊該文件來使用自己的程式開啟。
3. 註冊表的處理在下面的MSDN站點,我們可以得到在VS.NET中透過Setup and Deployment Projects來製作自己的安裝程式的範例:
http://msdn.microsoft.com/library/en-us/vsintro7/html/vbconDeploymentScenarios.asp
--------------------------- -------------------------------------------------- ---
發布.NET Framework
.NET Framework 1.0提供一個用來重新部署.NET的exe檔:Dotnetfx.exe. 它包含了Common Language Runtime和其它.NET程式執行階段必不可少的內容。
我們可以從下面的網站下載該exe檔:
http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/829/msdncompositedoc.xml
同時,我們也可以在VS.NET安裝CD或DVD中找到該檔案。
我們可以透過多種方式來透過執行Dotnetfx.exe把.NET Framework部署到目標機器上:
1. 透過Microsoft Systems Management Server部署。
2. 透過Active Directory部署。
3. 使用第三方工具。
具體的信息,我們可以參閱下面的文章:
http://msdn.microsoft.com/library/en-us/dnnetdep/html/redistdeploy.asp
--------------------------- -------------------------------------------------- ---
製作自己的native安裝程式如果我們要把自己的.NET程式發佈到目標機器上,同時我們不確定該目標機器是否已經安裝了.NET Framework, 那我們就需要自己設計一段unmanaged程式碼,來判斷目標機器是否安裝了.NET Framework, 如果沒有,則執行Dotnetfx.exe安裝.NET Framework, 然後利用Windows Installer安裝自己的程式。
在MSDN的下面網頁上,我們可以取得一個使用unmanaged C++實作的安裝程式和它的原始碼:
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/830/msdncompositedoc.xml
1. 在CSettings class中,透過讀取"settings.ini",獲得您自己的MSI安裝檔案和dotnetfx.exe的路徑,以及其他您自己的設定。 (例如.NET Framework的語言版本)
GetCaptionText(void)
GetDialogText(void)
GetErrorCaptionText(void)
GetIniName(void)
GetProductName(void)
Parse()函數用來解析settings.ini檔。
2. 在Main.cpp檔案中,全域函數FxInstallRequired()判斷是否要在目標機器上安裝.NET Framework. FxInstallRequired()會偵測下面的登錄鍵值和dotnetfx.exe的版本和語言設定。
HKLMSOFTWAREMicrosoft.NETFrameworkpolicyv1.0
3.如果需要安裝.NET Framework, 在全域函數ExecCmd()中呼叫下面的命令silent安裝dotnetfx.exe:
dotnetfx.exe /q:a /c:"install /l /q"
4。 在ExecCmd()全域函數中呼叫下面的命令安裝您自己的MSI檔案:
msiexec /i <your MSI file> REBOOT=ReallySuppress
--------------------------------------- -----------------------------------------
使用方法如果我們使用上面的native程式碼作為自己的安裝程序,那麼我們可以透過下面的步驟把自己的.NET程序和它結合在一起:
1.把您自己的.NET程式製作成為Windows Installer (.MSI)檔案。
2.開啟"settings.ini"文件,在"Msi" key中設定您自己的.NET程式的MSI檔案路徑和檔案名稱;在"FxInstallerPath" Key中,設定dotnetfx.exe的路徑。具體的參數訊息,您可以從下面文章中得到:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/redistdeploy.asp
3. 把"setup.exe", "settings.ini", "dotnetfx.exe"和您自己的MSI安裝文件,發送到目標機器上,然後運行"setup.exe", 安裝程式會自動檢測是否有. NET Framwork, 如果沒有,將先執行dotnetfx.exe。
透過上述步驟,您可以將自己的.NET程式成功的部署到沒有安裝.NET Framwork環境的機器上。
-------------------------------------------------- ------------------------------
總結透過上述步驟,您可以將自己的.NET程式成功的部署到沒有安裝. NET Framwork環境的機器上。
-------------------------------------------------- ------------------------------
作者張廣輝
2002年10月22日