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

news/2025/9/20 13:26:50/文章来源:https://www.cnblogs.com/chenshibao/p/19102313

使用Inno Setup制作WPF开发的桌面应用程序流程

1.项目框架布局

image

项目目录:D:\Project\XenD101H\Tools,这个目录我将下载innosetup-6.2.2.exe 安装的程序放置这里,以及有几个脚本执行文件,最后输出RadarSensorConfigTool.exe,放置在D:\Project\XenD101H\Tools\Install\Output这个目录下

image

image

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 当前版本信息已显示pauseexit /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>&1if %ERRORLEVEL% equ 0 (set "DOWNLOAD_TOOL=powershell"echo ✓ 使用 PowerShell 下载) else (echo ✗ 未找到下载工具echo 请手动下载 Inno Setup: https://jrsoftware.org/isdl.phppauseexit /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%pauseexit /b 1
)echo ✓ 下载完成: %INSTALLER_FILE%echo.
echo [4/4] 安装 Inno Setup...
echo 正在启动安装程序...
echo 请按照安装向导完成安装
echo.start "" "%INSTALLER_FILE%"echo 等待安装完成...
echo 安装完成后,请按任意键继续...
pauseecho.
echo 验证安装...
where iscc >nul 2>&1
if %ERRORLEVEL% equ 0 (echo ✓ Inno Setup 安装成功!echo.echo 版本信息:iscc /?
) else (echo ✗ Inno Setup 安装失败或未添加到PATHecho 请检查安装路径并手动添加到PATHecho 默认安装路径: 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;
beginResult := 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);
beginif CurStep = ssPostInstall thenbegin// 可以在这里添加安装完成后的自定义操作// 例如:创建配置文件、注册表项等end;
end;// 卸载前的自定义操作
function InitializeUninstall(): Boolean;
beginResult := True;// 检查程序是否正在运行if CheckForMutexes('MQ_RadarControlTool_Mutex') thenbeginif MsgBox('Radar Sensor Configuration Tool is running.' + #13#10 + 'Please close the program first, then retry uninstall.', mbError, MB_OK) = IDOK thenbeginResult := 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.exeecho   请先构建项目: dotnet build -c Releaseset /a ERROR_COUNT+=1
) else (echo ✓ 主程序文件存在
)echo 检查图标文件...
if not exist "..\logo.ico" (echo ✗ 图标文件不存在: ..\logo.icoset /a ERROR_COUNT+=1
) else (echo ✓ 图标文件存在
)echo 检查Inno Setup脚本...
if not exist "RadarSensorConfigTool_Setup.iss" (echo ✗ 修复版Inno Setup脚本不存在: RadarSensorConfigTool_Setup.issset /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脚本文件存在)pauseexit /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.phpecho 或运行: InstallInnoSetup.batpauseexit /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.exeecho.for %%I in ("Installer\Output\RadarSensorConfigTool.exe") do (echo 📊 安装包信息:echo    文件名: %%~nxIecho    大小: %%~zI 字节echo    路径: %%~fIecho    修改时间: %%~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的名称。

image

如果本文介绍对你有帮助,可以一键四连:点赞+评论+收藏+推荐,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】TreeSet讲解

什么是TreeSet?TreeSet是JAVA中集合的一种,它通过红黑树(Red-Black Tree)数据结构实现了有序的,唯一元素存储结构。一、TreeSet的定义 TreeSet是Java集合框架中的一种有序集合,它实现了Set接口,因此具有不允许重…

攻防世界 web

入门必看的ctf网站攻防世界 baby_web 解题 说到初始界面肯定是会想到index.php但是实际进入题目以后发现是1.php,在通过dirsearch扫描网页目录无果后尝试直接在url输入index.php,结果发现还是会自动跳转到1.php方法一…

批判 vs 审判

批判 vs 审判判断力是一个人最重要的能力

XXL-JOB-源码分享(1)

XXL-JOB-源码分享(1) 自研调度组件并支持集群部署,可保证调度中心HA;com.xxl.job.core.executor.XxlJobExecutor#initEmbedServer 初始化内部调度服务查看代码 private void initEmbedServer(String address, Stri…

ctfshow web入门 SSRF

ctfshow web351 curl_init():初始curl会话 curl_setopt():会话设置 curl_exec():执行curl会话,获取内容 curl_close():会话关闭 <?php // 关闭所有错误报告(不显示任何PHP错误) error_reporting(0);// 高亮显…

C#中避免GC压力和提高性能的8种技术

本文将展示 8 种技术来最大限度地降低 GC 压力,并通过这样做来提高性能。8 Techniques to Avoid GC Pressure and Improve Performance in C# .NET Performance | .NET , Memory / May 27, 2019 In a .NET applicati…

UNIX网络编程笔记:共享内存区和远程过程调用 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于OpenCv做照片分析应用一(Java) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

函数内联

本文将介绍 什么是内联(Inlining)、为什么重要,以及如何在 .NET 应用中有效使用 [MethodImpl]。一个相对小众但强大的工具就是 [MethodImpl(MethodImplOptions.AggressiveInlining)] 特性。 本文将介绍 什么是内联(…

7. Innodb底层原理与Mysql日志机制深入剖析

7.1 Mysql的内部结构 大体来说,MySQL可以分为Server层和存储引擎层两部分。 7.1.1 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内 置函数(如日期、…

WPF 字符竖向排列的排版格式(直排)表明控件

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

新建Vue3项目流程

新建Vue3项目流程​一、环境准备​​ 创建Vue3项目前,需确保系统安装以下工具:• ​​Node.js​​:建议使用LTS版本(≥18.3),可通过node -v命令检查是否安装成功;• ​​包管理工具​​:推荐使用npm(Node.js自…

G. Chimpanzini Bananini

View PostG. Chimpanzini BananiniG. Chimpanzini Bananini大致题意:有以下三种操作:循环右移数组,即 \([a_1, a_2, \ldots, a_n]\) 变成 \([a_n, a_1, a_2, \ldots, a_{n-1}]\)。 反转数组,即 \([a_1, a_2, \ldot…

深入解析:HSA35NV001美光固态闪存NQ482NQ470

深入解析:HSA35NV001美光固态闪存NQ482NQ470pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

ERP和MES、WMS、CRM,到底怎么配合 - 智慧园区

最近和不少老板聊ERP的时候,有句话听得特别多:总部说上了ERP就够了 可仓库说还要WMS 生产说MES必不可少 销售又提CRM这些系统到底怎么配合? 这话一出,就把企业信息化的痛点揭示出来了—— 很多老板以为ERP能包打天…

YOLO实战应用 1YOLOv5 架构与模块

实战应用 YOLOv5 架构与模块 核心概念YOLOv5:YOLO 系列的工程化实现,结构更简洁,代码更易读。 配置文件解析:通过 .yaml/.cfg 文件逐层定义网络结构。 Focus 模块:将输入图像切片重组,降低空间分辨率的同时增加…

YOLO实战应用 2数据准备与增强

实战应用 2数据准备与增强 核心概念残差模块 (shortcut / cover block):通过卷积与捷径连接实现特征相加,保证深层网络训练稳定。 NMS(非极大值抑制):用于去除多余重叠框,提升检测结果的准确性。 Soft-NMS:对高…

Day18稀疏数组

二维数组中的大部分默认值都为零,导致记录了许多没有意义的数据,稀疏数组用坐标对应有效值的方式大大简化了原本繁杂的数组package com.cc.array;import java.util.Arrays;public class ArrayDemo8 {public static v…

底层

面向过程转变成面向对象的底层逻辑 本套课程有一定难度,讲得不好,请多多包涵!里面有很多我的个人见解(仅供参考!如有指导,请把邮件发送到该邮箱690141760@qq.com) 如果有人问面向对象四大特征是什么?我相信基本…