首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Inno Setup 完美解決 .NET Framework 部署難題

     編輯:關於.NET

背景動機

開發內部局域網應用,需支援 Windows XP 到 Windows 7 多種作業系統,專案基於 VS2008/.NET Framework 2.0。由於部分機器未預裝 .NET 2.0,安裝包必須能自動檢測並安裝運行時。經評估三種方案:

  • Visual Studio 內建工具:研究成本高、早期嘗試失敗
  • InstallShield:功能強但上手難、授權昂貴
  • Inno Setup:免費、開源、支援所有 Windows 版本、腳本靈活——最終選擇

方案一:線上下載安裝(安裝包體積小)

原理:安裝啟動時檢查登錄機碼 HKLM\SOFTWARE\Microsoft\.NETFramework\policy\v2.0,若不存在則提示下載安裝。

[Code]
function InitializeSetup: Boolean;
var Path: string; ResultCode: Integer;
begin
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v2.0') then
    Result := True
  else if MsgBox('系統檢測到您沒有安裝 .NET Framework 2.0,是否立刻下載並安裝?', mbConfirmation, MB_YESNO) = idYes then
  begin
    Path := ExpandConstant('{pf}\Internet Explorer\iexplore.exe');
    Exec(Path, 'https://www.xxx.com/down/dotnetfx2.exe', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    MsgBox('請安裝好 .NET Framework 2.0 環境後,再運行本安裝包程序!', mbInformation, MB_OK);
    Result := False;
  end
  else
  begin
    MsgBox('沒有安裝 .NET Framework 2.0 環境,無法運行程式,安裝程序即將退出!', mbInformation, MB_OK);
    Result := False;
  end;
end;

優點:僅未安裝機器需下載,安裝包體積小。
缺點:離線環境無法安裝(如辦公室下載後帶回家離線電腦)。

方案二:內嵌運行時安裝檔(離線可用,體積稍大)

將 dotnetfx20.exe (約 22MB) 打包進安裝檔,安裝前解壓至暫存目錄 {tmp} 安裝,重開機自動清理。

[Files]
Source: "F:\Project\dotnetfx20.exe"; DestDir: "{tmp}"; Flags: ignoreversion

[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;
  Result := True;
end;

優點:完全離線安裝、用戶無感知。
缺點:安裝包增大 ~22MB(今時今日網速與儲存通常可接受)。

此模式同樣適用於 .NET 3.0/3.5、Java SE 等運行時部署。

總結

Inno Setup 腳本靈活、免費開源,透過登錄檢測與暫存目錄釋放機制,優雅解決 .NET Framework 相依性部署問題。專案來源:周公專欄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved