民初思韻網

加入收藏   設為首頁
選擇語言   簡體中文
你好,請 登陸 或 注冊
首頁 人文思韻 傳奇人物 歷史思潮 時代作品 話題討論 國民思韻 民初捐助 賬戶管理
  搜索  
    人文精神 >>> 技術的天空 溫和的思緒
字體    

用Inno Setup來解決.NetFramework安裝問題
用Inno Setup來解決.NetFramework安裝問題
網載     阅读简体中文版

前段時間朋友接了一個項目,具體是開發一個安裝在局域網內的軟件,這個軟件會定時連接局域網內的服務器來更新本地客戶端的一些信息,因為在局域網內存在著多種不同的Windows版本,從WindowsXPWindows2003Windows2008Windows7等,這個軟件采用VS2008/.Net Framework2.0開發,因為有些系統默認沒有安裝.Net Framework2.0,所以在運行時需要確保客戶機上已經安裝上.Net Framework2.0,于是想到將軟件打包。制作軟件安裝包有幾種工具和方案:一是利用Visual Studio自帶的安裝包制作工具;二是利用InstallShield這類收費的、專業的安裝包制作工具;三是利用Inno Setup這類免費的、專業的安裝包制作工具。Visual Studio自帶的安裝包制作工具研究得不深,早期曾經嘗試過將軟件打包成一個安裝文件內,不過最終失敗了,后來干脆就不再研究了;InstallShield這類收費的安裝包制作軟件功能確實強大,不過上手確實也不容易,再加上是收費的(盡管可以找到破解版,但是總覺得不爽),于是轉而尋求利用Inno Setup來解決。Inno Setup 是一個免費的 Windows 安裝程序制作軟件,它支持現在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008, 2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服務包)。 并且Inno Setup最早出現在1997年,是一個免費開源的軟件,即使作為商業使用也是如此。Inno Setup的官方網站網址是http://www.jrsoftware.org,當然也可以下載它的中文版本,比如[楓林夜思雨]漢化的Inno Setup就還不錯,我給朋友打包時用的是英文版Inno Setup文件,只不過安裝文件中用到的.isl文件被我翻譯成中文了。我們想到的辦法就是將軟件制作成安裝包,運行安裝包的時候會檢查客戶機上是否安裝了.Net Framework2.0,如果沒有則從局域網內服務器上下載.Net Framework2.0安裝文件安裝,然后繼續安裝和配置開發的軟件。從網上搜到這個一個解決方案,代碼如下:  [code]
  function InitializeSetup: Boolean;
  var Path:string ;
         ResultCode: Integer;
  begin
     if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0') then
     begin
         Result := true;
     end
     else
     begin
         if MsgBox('系統檢測到您沒有安裝.Net Framework2.0,是否立刻下載并安裝?', mbConfirmation, MB_YESNO) = idYes then
         begin
             Path := ExpandConstant('{pf}\Internet Explorer\iexplore.exe');
             Exec(Path, 'http://www.xxx.com/down/dotnetfx2.exe', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
             MsgBox('請安裝好.Net Framework2.0環境后,再運行本安裝包程序!',mbInformation,MB_OK);
             Result := false;
         end
         else
         begin
             MsgBox('沒有安裝.Net Framework2.0環境,無法運行XXX程序,本安裝程序即將退出!',mbInformation,MB_OK);
             Result := false;
         end;
     end;
  end;上面這段代碼的作用是通過檢查注冊表來判斷客戶機上是否安裝了.Net Framework2.0,如果沒有就從http://www.xxx.com/down/dotnetfx2.exe處下載,并提示用戶安裝下載的.Net Framework2.0的程序之后再安裝本程序。這么做有一個優點,因為并不是所有的機器都沒有安裝.Net Framework2.0,所以僅僅是一部分沒有安裝的機器才會需要下載,這樣也就不需要將.Net Framework2.0打包進安裝包,是安裝包比較小。不過這樣在某些情況下也會出現問題,比如開發了一個不錯的軟件,用戶在辦公室里上網并下載和安裝了這個軟件,覺得不錯,拷貝到家里沒有上網的機器上時就不能安裝和使用了,這樣麻煩就來了。因此下面想到了另一種解決辦法,這種辦法就是將.Net Framework2.0打包進安裝文件,在安裝開始之前檢查客戶機上是否安裝了.Net Framework2.0,如果沒有安裝就將.Net Framework2.0安裝文件從安裝包里解壓縮出來到臨時文件夾下并從臨時文件夾下安裝,否則就直接安裝開發后的軟件,臨時文件夾下的文件會在系統重新系統啟動時被自動清理,不用担心占用磁盤空間。以下是部分關鍵代碼: [Files]
.........
Source: "F:\周公的專欄\dotnetfx20.exe"; DestDir: "{tmp}"; Flags: ignoreversion
; 周公的專欄友情提示:dotnetfx20.exe并不會拷貝到安裝后的目錄中,而是在臨時目錄中,這樣重啟機器之后就會被刪除掉    

[code]
function CheckDotNet2_0():boolean;
begin
Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');
end;

function InitializeSetup(): Boolean;
var Path:string;
        ResultCode: Integer;
begin
    if CheckDotNet2_0() then
    begin
        ExtractTemporaryFile('dotnetfx20.exe');
        Exec(ExpandConstant('{tmp}\dotnetfx20.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    end;
end;通過上面的代碼確保了不會將dotnetfx20.exe拷貝到安裝后的文件夾中,在Visual StudioInstallShield相信也應該會有這樣的功能,只是筆者沒有找到,這個功能我覺得比較實用,如果客戶機器上已經安裝了.Net Framework2.0的話不會在安裝時不會感覺到有什么,如果沒有安裝就會將dotnetfx20.exe釋放到臨時文件夾下,并從臨時文件夾下安裝.Net Framework2.0,這樣確保dotnetfx20.exe不會占用安裝文件夾的空間。這樣制作安裝包的好處是在安裝軟件時無需担心用戶是否聯網,缺點是使安裝文件略顯有點大,因為制作的安裝包中要包含一個20Mdotnetfx20.exe,不過在網速和存儲設備都不是問題的今天,這個不是什么太大的問題,當然是有點讓人感覺略微地不爽,可能自己開發的軟件才數百K,而必須附帶一個20Mdotnetfx20.exe。這也是沒有辦法的事情,像早期可以跨*nixWindowsJava和現在可以跨不同版本的.NET,為了實現在不同平臺上有相同的表現,就必須要運行時的支持,正所謂熊掌魚肉不可兼得,雖然有些第三方開發的軟件可以將Java或者.NET平臺上的軟件制作成無需運行時支持的exe文件,但是能否在各個平臺上得到一致的表現,有待考證。其實這種做法不僅可以用于檢測.Net Framework2.0的情況,也可以用于其它情況,比如檢測.Net Framework3.0或者.Net Framework3.5的情況,特別是當你向朋友展示你開發的WPF應用時;此外,還可以用于部署Java SE項目。周公2010228

本文出自 “周公(周金橋)的專欄” 博客,請務必保留此出處http://zhoufoxcn.blog.51cto.com/792419/279243

2015-05-18 09:58

歡迎訂閱我們的微信公眾賬號!
春秋茶館訂閱號
微信號 season-tea(春秋茶館)
每天分享一篇科技/遊戲/人文類的資訊,點綴生活,啟迪思想,探討古典韻味。
  清末民初歷史人物  民初人物
散文大家曠達風趣
梁實秋(1903年1月6日-1987年11月3日),號均默,原名梁治華,字實秋,筆名子佳、秋郎,程淑等,中國著名的散文家、學者、文學批評家、翻譯家,華人世界第一個研究莎士....
高文費而隱 古德潔無華
楊霽園先生是民國時期寧波的一位大儒,一生致力于教育、述著,著作宏豐,在國學、文學等方面成就卓著,更兼他品行方端、至誠至孝,自1940年去世后,鄉人及門生一直追思不息。但楊....
資助民初精神網
        回頂部     寫評論

 
評論集
暫無評論!
發表評論歡迎你的評論
昵稱:     登陸  註冊
主頁:  
郵箱:  (僅管理員可見)

驗證:   验证码(不區分大小寫)  
© 2011   民初思韻網-清末民初傳奇時代的發現與復興   版權所有   加入收藏    設為首頁    聯繫我們    1616導航