使用Inno Setup打包安裝程序exe流程
使用Inno Setup制作WPF開發的桌面應用程序流程
1.項目框架布局

項目目錄:D:\Project\XenD101H\Tools,這個目錄我將下載innosetup-6.2.2.exe 安裝的程序放置這里,以及有幾個腳本執行文件,最后輸出RadarSensorConfigTool.exe,放置在D:\Project\XenD101H\Tools\Install\Output這個目錄下


2.制作安裝包流程:
2.1 下載innosetup-6.2.2.exe,雙擊執行InstallInnoSetup.bat文件【如果已安裝可跳過】
腳本內容如下:
@echo off
echo ========================================
echo Inno Setup 自動安裝腳本
echo ========================================
echo.
echo [1/4] 檢查是否已安裝...
where iscc >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo ? Inno Setup 已安裝
iscc /?
echo.
echo 當前版本信息已顯示
pause
exit /b 0
)
echo ? Inno Setup 未安裝,開始安裝...
echo.
echo [2/4] 檢查下載工具...
where curl >nul 2>&1
if %ERRORLEVEL% equ 0 (
set "DOWNLOAD_TOOL=curl"
echo ? 使用 curl 下載
) else (
where powershell >nul 2>&1
if %ERRORLEVEL% equ 0 (
set "DOWNLOAD_TOOL=powershell"
echo ? 使用 PowerShell 下載
) else (
echo ? 未找到下載工具
echo 請手動下載 Inno Setup: https://jrsoftware.org/isdl.php
pause
exit /b 1
)
)
echo.
echo [3/4] 下載 Inno Setup...
set "DOWNLOAD_URL=https://files.jrsoftware.org/is/6/innosetup-6.2.2.exe"
set "INSTALLER_FILE=innosetup-6.2.2.exe"
if "%DOWNLOAD_TOOL%"=="curl" (
echo 使用 curl 下載...
curl -L -o "%INSTALLER_FILE%" "%DOWNLOAD_URL%"
) else (
echo 使用 PowerShell 下載...
powershell -Command "& { Invoke-WebRequest -Uri '%DOWNLOAD_URL%' -OutFile '%INSTALLER_FILE%' }"
)
if not exist "%INSTALLER_FILE%" (
echo ? 下載失敗
echo 請手動下載: %DOWNLOAD_URL%
pause
exit /b 1
)
echo ? 下載完成: %INSTALLER_FILE%
echo.
echo [4/4] 安裝 Inno Setup...
echo 正在啟動安裝程序...
echo 請按照安裝向導完成安裝
echo.
start "" "%INSTALLER_FILE%"
echo 等待安裝完成...
echo 安裝完成后,請按任意鍵繼續...
pause
echo.
echo 驗證安裝...
where iscc >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo ? Inno Setup 安裝成功!
echo.
echo 版本信息:
iscc /?
) else (
echo ? Inno Setup 安裝失敗或未添加到PATH
echo 請檢查安裝路徑并手動添加到PATH
echo 默認安裝路徑: C:\Program Files (x86)\Inno Setup 6\
)
echo.
echo 清理臨時文件...
if exist "%INSTALLER_FILE%" del "%INSTALLER_FILE%"
echo.
echo ========================================
echo ? Inno Setup 安裝完成!
echo ========================================
echo.
echo ?? 安裝信息:
echo - 版本: Inno Setup 6.2.2
echo - 安裝路徑: C:\Program Files (x86)\Inno Setup 6\
echo - 編譯器: iscc.exe
echo.
echo ?? 下一步:
echo 1. 運行 RadarSensorConfigToolInstaller_Fixed_v2.bat 生成安裝包
echo 2. 或運行 QuickTestInstaller.bat 快速測試
echo.
pause
2.2 新建RadarSensorConfigTool_Setup.iss
; 雷達傳感器配置工具 Inno Setup 安裝腳本 (Tools目錄版本)
; 使用 Inno Setup PE 生成安裝程序
#define MyAppName "Radar Sensor Config Tool"
#define MyAppVersion "1.0.0"
#define MyAppPublisher "QUECTEL Technology"
#define MyAppURL "https://www.mqtech.com"
#define MyAppExeName "MQ_RadarControlTool.exe"
#define MyAppIcon "..\logo.ico"
[Setup]
; 應用程序基本信息
AppId={{12345678-1234-1234-1234-123456789012}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
; 安裝包設置
DefaultDirName={autopf}\MQ_RadarControlTool
DefaultGroupName=Radar Sensor Config Tool
AllowNoIcons=yes
LicenseFile=
InfoBeforeFile=
InfoAfterFile=
OutputDir=Installer\Output
OutputBaseFilename=RadarSensorConfigTool
SetupIconFile={#MyAppIcon}
Compression=lzma
SolidCompression=yes
WizardStyle=modern
; 系統要求
MinVersion=6.1sp1
PrivilegesRequired=admin
; 界面設置
WizardImageFile=
WizardSmallImageFile=
DisableProgramGroupPage=yes
DisableReadyPage=no
DisableFinishedPage=no
; 語言設置 - 使用默認英語,避免語言文件問題
LanguageDetectionMethod=locale
ShowLanguageDialog=no
[Languages]
; 只使用默認英語,避免中文語言文件問題
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Flags: unchecked
Name: "quicklaunchicon"; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
[Files]
; 主程序文件 - 使用相對路徑指向項目根目錄
Source: "..\bin\Release\net8.0-windows\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\MQ_RadarControlTool.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\MQ_RadarControlTool.runtimeconfig.json"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\MQ_RadarControlTool.deps.json"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\MQ_RadarControlTool.pdb"; DestDir: "{app}"; Flags: ignoreversion
; 依賴庫文件
Source: "..\bin\Release\net8.0-windows\CommunityToolkit.Mvvm.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\System.IO.Ports.dll"; DestDir: "{app}"; Flags: ignoreversion
; 運行時庫文件
Source: "..\bin\Release\net8.0-windows\runtimes\win\lib\net8.0\System.IO.Ports.dll"; DestDir: "{app}\runtimes\win\lib\net8.0"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\runtimes\unix\lib\net8.0\System.IO.Ports.dll"; DestDir: "{app}\runtimes\unix\lib\net8.0"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\runtimes\linux-x64\native\libSystem.IO.Ports.Native.so"; DestDir: "{app}\runtimes\linux-x64\native"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\runtimes\linux-arm\native\libSystem.IO.Ports.Native.so"; DestDir: "{app}\runtimes\linux-arm\native"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\runtimes\linux-arm64\native\libSystem.IO.Ports.Native.so"; DestDir: "{app}\runtimes\linux-arm64\native"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\runtimes\osx-x64\native\libSystem.IO.Ports.Native.dylib"; DestDir: "{app}\runtimes\osx-x64\native"; Flags: ignoreversion
Source: "..\bin\Release\net8.0-windows\runtimes\osx-arm64\native\libSystem.IO.Ports.Native.dylib"; DestDir: "{app}\runtimes\osx-arm64\native"; Flags: ignoreversion
; 配置文件和圖標
Source: "..\default_config.json"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#MyAppIcon}"; DestDir: "{app}"; Flags: ignoreversion
; 注意:不要包含臨時文件、日志文件等
[Icons]
; 開始菜單快捷方式
Name: "{group}\Radar Sensor Config Tool"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppIcon}"
Name: "{group}\Uninstall Radar Sensor Config Tool"; Filename: "{uninstallexe}"
; 桌面快捷方式
Name: "{autodesktop}\Radar Sensor Config Tool"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppIcon}"; Tasks: desktopicon
; 快速啟動欄快捷方式
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Radar Sensor Config Tool"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppIcon}"; Tasks: quicklaunchicon
[Run]
; 安裝完成后運行程序
Filename: "{app}\{#MyAppExeName}"; Description: "Launch {#MyAppName}"; Flags: nowait postinstall skipifsilent
[UninstallDelete]
; 卸載時刪除的文件和目錄
Type: filesandordirs; Name: "{app}\logs"
Type: filesandordirs; Name: "{app}\temp"
Type: files; Name: "{app}\*.log"
[Code]
// 簡化的自定義代碼,移除復雜的.NET檢測
function InitializeSetup(): Boolean;
begin
Result := True;
// 顯示簡單的歡迎信息
MsgBox('Welcome to Radar Sensor Config Tool Setup!' + #13#10 + #13#10 +
'Please ensure .NET 8.0 runtime is installed on your system.',
mbInformation, MB_OK);
end;
// 安裝完成后的自定義操作
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
// 可以在這里添加安裝完成后的自定義操作
// 例如:創建配置文件、注冊表項等
end;
end;
// 卸載前的自定義操作
function InitializeUninstall(): Boolean;
begin
Result := True;
// 檢查程序是否正在運行
if CheckForMutexes('MQ_RadarControlTool_Mutex') then
begin
if MsgBox('Radar Sensor Configuration Tool is running.' + #13#10 +
'Please close the program first, then retry uninstall.',
mbError, MB_OK) = IDOK then
begin
Result := False;
end;
end;
end;
2.3 新建RadarSensorConfigToolInstaller_Fixed_v2.bat,雙擊執行,
命令內容如下:
@echo off
chcp 65001 >nul
echo ========================================
echo 雷達傳感器配置工具 快速測試安裝包 (修復版 v2)
echo ========================================
echo.
echo [1/4] 檢查必要文件...
set "ERROR_COUNT=0"
echo 檢查主程序文件...
if not exist "..\bin\Release\net8.0-windows\MQ_RadarControlTool.exe" (
echo ? 主程序文件不存在: ..\bin\Release\net8.0-windows\MQ_RadarControlTool.exe
echo 請先構建項目: dotnet build -c Release
set /a ERROR_COUNT+=1
) else (
echo ? 主程序文件存在
)
echo 檢查圖標文件...
if not exist "..\logo.ico" (
echo ? 圖標文件不存在: ..\logo.ico
set /a ERROR_COUNT+=1
) else (
echo ? 圖標文件存在
)
echo 檢查Inno Setup腳本...
if not exist "RadarSensorConfigTool_Setup.iss" (
echo ? 修復版Inno Setup腳本不存在: RadarSensorConfigTool_Setup.iss
set /a ERROR_COUNT+=1
) else (
echo ? 修復版Inno Setup腳本存在
)
if %ERROR_COUNT% gtr 0 (
echo.
echo ? 發現 %ERROR_COUNT% 個錯誤,請先解決這些問題
echo.
echo ?? 解決方案:
if not exist "..\bin\Release\net8.0-windows\MQ_RadarControlTool.exe" (
echo 1. 構建項目: dotnet build -c Release
)
if not exist "..\logo.ico" (
echo 2. 確保logo.ico文件在項目根目錄
)
if not exist "RadarSensorConfigTool_Setup.iss" (
echo 3. 確保修復版Inno Setup腳本文件存在
)
pause
exit /b 1
)
echo.
echo [2/4] 檢查Inno Setup編譯器...
set "INNO_PATH="
where iscc >nul 2>&1
if %ERRORLEVEL% equ 0 (
echo ? Inno Setup編譯器在PATH中可用
set "INNO_PATH=iscc"
) else (
echo 警告: 未找到Inno Setup編譯器
echo 嘗試查找Inno Setup安裝路徑...
if exist "C:\Program Files (x86)\Inno Setup 6\iscc.exe" (
set "INNO_PATH=C:\Program Files (x86)\Inno Setup 6\iscc.exe"
echo ? 找到Inno Setup 6: %INNO_PATH%
) else if exist "C:\Program Files\Inno Setup 6\iscc.exe" (
set "INNO_PATH=C:\Program Files\Inno Setup 6\iscc.exe"
echo ? 找到Inno Setup 6: %INNO_PATH%
) else if exist "C:\Program Files (x86)\Inno Setup 5\iscc.exe" (
set "INNO_PATH=C:\Program Files (x86)\Inno Setup 5\iscc.exe"
echo ? 找到Inno Setup 5: %INNO_PATH%
) else if exist "C:\Program Files\Inno Setup 5\iscc.exe" (
set "INNO_PATH=C:\Program Files\Inno Setup 5\iscc.exe"
echo ? 找到Inno Setup 5: %INNO_PATH%
) else (
echo ? 未找到Inno Setup編譯器
echo 請下載并安裝Inno Setup: https://jrsoftware.org/isinfo.php
echo 或運行: InstallInnoSetup.bat
pause
exit /b 1
)
)
echo.
echo [3/4] 準備輸出目錄...
if not exist "Installer" mkdir "Installer"
if not exist "Installer\Output" mkdir "Installer\Output"
echo ? 輸出目錄準備完成
echo.
echo [4/4] 生成安裝包...
echo 使用編譯器: %INNO_PATH%
echo 編譯腳本: RadarSensorConfigTool_Setup.iss
echo 輸出目錄: Installer\Output
echo.
echo 開始編譯...
"%INNO_PATH%" "RadarSensorConfigTool_Setup.iss"
if %ERRORLEVEL% equ 0 (
echo.
echo ========================================
echo ? 安裝包生成成功!
echo ========================================
echo.
if exist "Installer\Output\RadarSensorConfigTool.exe" (
echo ?? 安裝包位置:
echo Tools\Installer\Output\RadarSensorConfigTool.exe
echo.
for %%I in ("Installer\Output\RadarSensorConfigTool.exe") do (
echo ?? 安裝包信息:
echo 文件名: %%~nxI
echo 大小: %%~zI 字節
echo 路徑: %%~fI
echo 修改時間: %%~tI
)
echo.
echo ?? 測試選項:
echo 1. 運行安裝包
echo 2. 打開安裝包目錄
echo 3. 退出
echo.
set /p choice="請選擇 (1-3): "
if "%choice%"=="1" (
echo 啟動安裝包...
start "" "Installer\Output\RadarSensorConfigTool.exe"
) else if "%choice%"=="2" (
echo 打開安裝包目錄...
start "" "Installer\Output"
)
) else (
echo ? 安裝包文件未找到
echo 請檢查編譯日志
)
) else (
echo.
echo ? 安裝包生成失敗
echo 錯誤代碼: %ERRORLEVEL%
echo.
echo ?? 可能的解決方案:
echo 1. 檢查Inno Setup腳本語法
echo 2. 確保所有源文件存在
echo 3. 檢查文件路徑是否正確
)
echo.
pause
執行完成后,安裝包就可以生成了,本腳本可以復用,只需要改你編譯好發布好的dll或程序exe的名稱。

如果本文介紹對你有幫助,可以一鍵四連:點贊+評論+收藏+推薦,謝謝!

浙公網安備 33010602011771號