蕶喥栤膤 發表於 2025-9-20 13:24:00

使用Inno Setup打包安装程序exe流程

<h1 id="使用inno-setup制作wpf开发的桌面应用程序流程">使用Inno Setup制作WPF开发的桌面应用程序流程</h1>
<h2 id="1项目框架布局">1.项目框架布局</h2>
<p><img src="https://img2024.cnblogs.com/blog/2212230/202509/2212230-20250920125427015-680414241.png"></p>
<p>项目目录:D:\Project\XenD101H\Tools,这个目录我将下载innosetup-6.2.2.exe 安装的程序放置这里,以及有几个脚本执行文件,最后输出RadarSensorConfigTool.exe,放置在D:\Project\XenD101H\Tools\Install\Output这个目录下</p>
<p><img src="https://img2024.cnblogs.com/blog/2212230/202509/2212230-20250920125638072-1460177496.png"></p>
<p><img src="https://img2024.cnblogs.com/blog/2212230/202509/2212230-20250920130107212-210909338.png"></p>
<h2 id="2制作安装包流程">2.制作安装包流程:</h2>
<h3 id="21-下载innosetup-622exe双击执行installinnosetupbat文件如果已安装可跳过">2.1 下载innosetup-6.2.2.exe,双击执行InstallInnoSetup.bat文件【如果已安装可跳过】</h3>
<p>脚本内容如下:</p>
<pre><code>@echo off
echo ========================================
echo Inno Setup 自动安装脚本
echo ========================================

echo.
echo 检查是否已安装...
where iscc &gt;nul 2&gt;&amp;1
if %ERRORLEVEL% equ 0 (
        echo ✓ Inno Setup 已安装
        iscc /?
        echo.
        echo 当前版本信息已显示
        pause
        exit /b 0
)

echo ✗ Inno Setup 未安装,开始安装...

echo.
echo 检查下载工具...
where curl &gt;nul 2&gt;&amp;1
if %ERRORLEVEL% equ 0 (
        set "DOWNLOAD_TOOL=curl"
        echo ✓ 使用 curl 下载
) else (
        where powershell &gt;nul 2&gt;&amp;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 下载 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 "&amp; { 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 安装 Inno Setup...
echo 正在启动安装程序...
echo 请按照安装向导完成安装
echo.

start "" "%INSTALLER_FILE%"

echo 等待安装完成...
echo 安装完成后,请按任意键继续...
pause

echo.
echo 验证安装...
where iscc &gt;nul 2&gt;&amp;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
</code></pre>
<h3 id="22-新建radarsensorconfigtool_setupiss">2.2 新建RadarSensorConfigTool_Setup.iss</h3>
<pre><code>; 雷达传感器配置工具 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"


; 应用程序基本信息
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


; 只使用默认英语,避免中文语言文件问题
Name: "english"; MessagesFile: "compiler:Default.isl"


Name: "desktopicon"; Description: "Create a &amp;desktop icon"; GroupDescription: "Additional icons:"; Flags: unchecked
Name: "quicklaunchicon"; Description: "Create a &amp;Quick Launch icon"; GroupDescription: "Additional icons:"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode


; 主程序文件 - 使用相对路径指向项目根目录
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

; 注意:不要包含临时文件、日志文件等


; 开始菜单快捷方式
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


; 安装完成后运行程序
Filename: "{app}\{#MyAppExeName}"; Description: "Launch {#MyAppName}"; Flags: nowait postinstall skipifsilent


; 卸载时删除的文件和目录
Type: filesandordirs; Name: "{app}\logs"
Type: filesandordirs; Name: "{app}\temp"
Type: files; Name: "{app}\*.log"


// 简化的自定义代码,移除复杂的.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;
</code></pre>
<h3 id="23-新建radarsensorconfigtoolinstaller_fixed_v2bat双击执行">2.3 新建RadarSensorConfigToolInstaller_Fixed_v2.bat,双击执行,</h3>
<p>命令内容如下:</p>
<pre><code>@echo off
chcp 65001 &gt;nul
echo ========================================
echo 雷达传感器配置工具 快速测试安装包 (修复版 v2)
echo ========================================

echo.
echo 检查必要文件...
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 检查Inno Setup编译器...
set "INNO_PATH="
where iscc &gt;nul 2&gt;&amp;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 准备输出目录...
if not exist "Installer" mkdir "Installer"
if not exist "Installer\Output" mkdir "Installer\Output"
echo ✓ 输出目录准备完成

echo.
echo 生成安装包...
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
</code></pre>
<p>执行完成后,安装包就可以生成了,本脚本可以复用,只需要改你编译好发布好的dll或程序exe的名称。</p>
<p><img src="https://img2024.cnblogs.com/blog/2212230/202509/2212230-20250920131319557-179037247.png"></p>
<p><strong>如果本文介绍对你有帮助,可以一键四连:点赞+评论+收藏+推荐,谢谢!</strong></p><br><br>
来源:https://www.cnblogs.com/chenshibao/p/19102313
頁: [1]
查看完整版本: 使用Inno Setup打包安装程序exe流程