乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用Inno Setup來(lái)解決.NetFramework框架安裝問(wèn)題

       weicat 2010-06-30

      前段時(shí)間朋友接了一個(gè)項(xiàng)目,具體是開(kāi)發(fā)一個(gè)安裝在局域網(wǎng)內(nèi)的軟件,這個(gè)軟件會(huì)定時(shí)連接局域網(wǎng)內(nèi)的服務(wù)器來(lái)更新本地客戶端的一些信息,因?yàn)樵诰钟蚓W(wǎng)內(nèi)存在著多種不同的Windows版本,從WindowsXPWindows2003Windows2008Windows7等,這個(gè)軟件采用VS2008/.Net Framework2.0開(kāi)發(fā),因?yàn)橛行┫到y(tǒng)默認(rèn)沒(méi)有安裝.Net Framework2.0,所以在運(yùn)行時(shí)需要確??蛻魴C(jī)上已經(jīng)安裝上.Net Framework2.0,于是想到將軟件打包。

      制作軟件安裝包有幾種工具和方案:一是利用Visual Studio自帶的安裝包制作工具;二是利用InstallShield這類收費(fèi)的、專業(yè)的安裝包制作工具;三是利用Inno Setup這類免費(fèi)的、專業(yè)的安裝包制作工具。

      對(duì)Visual Studio自帶的安裝包制作工具研究得不深,早期曾經(jīng)嘗試過(guò)將軟件打包成一個(gè)安裝文件內(nèi),不過(guò)最終失敗了,后來(lái)干脆就不再研究了;InstallShield這類收費(fèi)的安裝包制作軟件功能確實(shí)強(qiáng)大,不過(guò)上手確實(shí)也不容易,再加上是收費(fèi)的(盡管可以找到破解版,但是總覺(jué)得不爽),于是轉(zhuǎn)而尋求利用Inno Setup來(lái)解決。

      Inno Setup 是一個(gè)免費(fèi)的 Windows 安裝程序制作軟件,它支持現(xiàn)在所有正在使用的 Windows 版本: 7, 2008 R2, Vista, XP, 2008, 2003, 2000, Me, 98, 95, 和 NT 4.0 (不需要服務(wù)包)。 并且Inno Setup最早出現(xiàn)在1997年,是一個(gè)免費(fèi)開(kāi)源的軟件,即使作為商業(yè)使用也是如此。Inno Setup的官方網(wǎng)站網(wǎng)址是http://www.,當(dāng)然也可以下載它的中文版本,比如[楓林夜思雨]漢化的Inno Setup就還不錯(cuò),我給朋友打包時(shí)用的是英文版Inno Setup文件,只不過(guò)安裝文件中用到的.isl文件被我翻譯成中文了。

      我們想到的辦法就是將軟件制作成安裝包,運(yùn)行安裝包的時(shí)候會(huì)檢查客戶機(jī)上是否安裝了.Net Framework2.0,如果沒(méi)有則從局域網(wǎng)內(nèi)服務(wù)器上下載.Net Framework2.0安裝文件安裝,然后繼續(xù)安裝和配置開(kāi)發(fā)的軟件。

      從網(wǎng)上搜到這個(gè)一個(gè)解決方案,代碼如下:

      Code:
      1. [code]   
      2.   
      3. function InitializeSetup: Boolean;   
      4.   
      5. var Path:string ;   
      6.   
      7.     ResultCode: Integer;   
      8.   
      9. begin  
      10.   
      11.   if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0'then  
      12.   
      13.   begin  
      14.   
      15.     Result := true;   
      16.   
      17.   end  
      18.   
      19.   else  
      20.   
      21.   begin  
      22.   
      23.     if MsgBox('系統(tǒng)檢測(cè)到您沒(méi)有安裝.Net Framework2.0,是否立刻下載并安裝?', mbConfirmation, MB_YESNO) = idYes then  
      24.   
      25.     begin  
      26.   
      27.       Path := ExpandConstant('{pf}\Internet Explorer\iexplore.exe');   
      28.   
      29.       Exec(Path, 'http://www./down/dotnetfx2.exe''', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);   
      30.   
      31.       MsgBox('請(qǐng)安裝好.Net Framework2.0環(huán)境后,再運(yùn)行本安裝包程序!',mbInformation,MB_OK);   
      32.   
      33.       Result := false;   
      34.   
      35.     end  
      36.   
      37.     else  
      38.   
      39.     begin  
      40.   
      41.       MsgBox('沒(méi)有安裝.Net Framework2.0環(huán)境,無(wú)法運(yùn)行XXX程序,本安裝程序即將退出!',mbInformation,MB_OK);   
      42.   
      43.       Result := false;   
      44.   
      45.     end;   
      46.   
      47.   end;   
      48.   
      49. end;  

      上面這段代碼的作用是通過(guò)檢查注冊(cè)表來(lái)判斷客戶機(jī)上是否安裝了.Net Framework2.0,如果沒(méi)有就從http://www./down/dotnetfx2.exe處下載,并提示用戶安裝下載的.Net Framework2.0的程序之后再安裝本程序。這么做有一個(gè)優(yōu)點(diǎn),因?yàn)椴⒉皇撬械臋C(jī)器都沒(méi)有安裝.Net Framework2.0,所以僅僅是一部分沒(méi)有安裝的機(jī)器才會(huì)需要下載,這樣也就不需要將.Net Framework2.0打包進(jìn)安裝包,是安裝包比較小。

      不過(guò)這樣在某些情況下也會(huì)出現(xiàn)問(wèn)題,比如開(kāi)發(fā)了一個(gè)不錯(cuò)的軟件,用戶在辦公室里上網(wǎng)并下載和安裝了這個(gè)軟件,覺(jué)得不錯(cuò),拷貝到家里沒(méi)有上網(wǎng)的機(jī)器上時(shí)就不能安裝和使用了,這樣麻煩就來(lái)了。因此下面想到了另一種解決辦法,這種辦法就是將.Net Framework2.0打包進(jìn)安裝文件,在安裝開(kāi)始之前檢查客戶機(jī)上是否安裝了.Net Framework2.0,如果沒(méi)有安裝就將.Net Framework2.0安裝文件從安裝包里解壓縮出來(lái)到臨時(shí)文件夾下并從臨時(shí)文件夾下安裝,否則就直接安裝開(kāi)發(fā)后的軟件,臨時(shí)文件夾下的文件會(huì)在系統(tǒng)重新系統(tǒng)啟動(dòng)時(shí)被自動(dòng)清理,不用擔(dān)心占用磁盤(pán)空間。

      以下是部分關(guān)鍵代碼:

      Code:
      1. [Files]   
      2.   
      3. .........   
      4.   
      5. Source: "F:\周公的專欄\dotnetfx20.exe"; DestDir: "{tmp}"; Flags: ignoreversion   
      6.   
      7. ; 周公的專欄友情提示:dotnetfx20.exe并不會(huì)拷貝到安裝后的目錄中,而是在臨時(shí)目錄中,這樣重啟機(jī)器之后就會(huì)被刪除掉    
      8.   
      9.   
      10. [code]   
      11.   
      12. function CheckDotNet2_0():boolean;   
      13.   
      14. begin  
      15.   
      16. Result:=not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0');   
      17.   
      18. end;   
      19.   
      20.   
      21. function InitializeSetup(): Boolean;   
      22.   
      23. var Path:string;   
      24.   
      25.     ResultCode: Integer;   
      26.   
      27. begin  
      28.   
      29.   if CheckDotNet2_0() then  
      30.   
      31.   begin  
      32.   
      33.     ExtractTemporaryFile('dotnetfx20.exe');   
      34.   
      35.     Exec(ExpandConstant('{tmp}\dotnetfx20.exe'), '''', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);   
      36.   
      37.   end;   
      38.   
      39. end;  

      通過(guò)上面的代碼確保了不會(huì)將dotnetfx20.exe拷貝到安裝后的文件夾中,在Visual StudioInstallShield相信也應(yīng)該會(huì)有這樣的功能,只是筆者沒(méi)有找到,這個(gè)功能我覺(jué)得比較實(shí)用,如果客戶機(jī)器上已經(jīng)安裝了.Net Framework2.0的話不會(huì)在安裝時(shí)不會(huì)感覺(jué)到有什么,如果沒(méi)有安裝就會(huì)將dotnetfx20.exe釋放到臨時(shí)文件夾下,并從臨時(shí)文件夾下安裝.Net Framework2.0,這樣確保dotnetfx20.exe不會(huì)占用安裝文件夾的空間。這樣制作安裝包的好處是在安裝軟件時(shí)無(wú)需擔(dān)心用戶是否聯(lián)網(wǎng),缺點(diǎn)是使安裝文件略顯有點(diǎn)大,因?yàn)橹谱鞯陌惭b包中要包含一個(gè)20Mdotnetfx20.exe,不過(guò)在網(wǎng)速和存儲(chǔ)設(shè)備都不是問(wèn)題的今天,這個(gè)不是什么太大的問(wèn)題,當(dāng)然是有點(diǎn)讓人感覺(jué)略微地不爽,可能自己開(kāi)發(fā)的軟件才數(shù)百K,而必須附帶一個(gè)20Mdotnetfx20.exe。這也是沒(méi)有辦法的事情,像早期可以跨*nixWindowsJava和現(xiàn)在可以跨不同版本的.NET,為了實(shí)現(xiàn)在不同平臺(tái)上有相同的表現(xiàn),就必須要運(yùn)行時(shí)的支持,正所謂熊掌魚(yú)肉不可兼得,雖然有些第三方開(kāi)發(fā)的軟件可以將Java或者.NET平臺(tái)上的軟件制作成無(wú)需運(yùn)行時(shí)支持的exe文件,但是能否在各個(gè)平臺(tái)上得到一致的表現(xiàn),有待考證。

      其實(shí)這種做法不僅可以用于檢測(cè).Net Framework2.0的情況,也可以用于其它情況,比如檢測(cè).Net Framework3.0或者.Net Framework3.5的情況,特別是當(dāng)你向朋友展示你開(kāi)發(fā)的WPF應(yīng)用時(shí);此外,還可以用于部署Java SE項(xiàng)目。

      周公

      2010228

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多