Inno Setup实战教程:从零制作Windows桌面安装包
1. 从零开始为什么Inno Setup依然是桌面安装包的首选如果你是一个独立开发者或者在一个小团队里负责打包分发桌面软件那你肯定对“如何把代码变成用户双击就能装的程序”这个问题不陌生。市面上打包工具不少从商业化的InstallShield、Advanced Installer到各种语言自带的打包模块比如Python的PyInstaller、Java的jpackage选择很多。但这么多年下来我依然会把Inno Setup推荐给绝大多数需要制作Windows桌面安装包的开发者尤其是那些追求稳定、轻量、高度可定制且完全免费的场景。Inno Setup是一个用Delphi编写的开源安装程序制作工具它的核心优势非常直接极致轻量、功能完备、脚本驱动、完全免费。生成的安装包本身就是一个独立的可执行文件.exe不需要依赖额外的运行时环境用户下载后直接运行即可。它的脚本.iss文件语法清晰虽然学习曲线比一些图形化工具陡一点但一旦掌握你几乎可以控制安装过程的每一个细节从文件复制、注册表操作、创建快捷方式到执行自定义的Pascal脚本。这种灵活性是很多“一键打包”工具无法比拟的。更重要的是它没有使用限制没有水印生成的安装包也足够专业完全可以用在商业软件的分发上。从你提供的热词列表也能看出大家关心的“安装包”、“教程”背后核心需求无非是几个稳定不出错、步骤清晰可循、能处理常见需求如环境检测、创建菜单项、以及最终打包出来的程序要靠谱。Inno Setup恰好能完美满足这些点。接下来我会以一个完整的实战项目为例带你从环境准备、脚本编写、到高级功能集成彻底掌握Inno Setup。我们假设要为一个用C编写的桌面小工具“DataProcessor”制作安装包这个工具需要复制一些DLL依赖库在开始菜单创建程序组并写入一个简单的注册表项用于记录安装路径。2. 环境搭建与第一个“Hello World”安装包工欲善其事必先利其器。使用Inno Setup的第一步不是直接写脚本而是把环境和工具链准备好。这里没有复杂的依赖主要就是Inno Setup编译器和它的集成开发环境IDE。2.1 获取与安装Inno Setup访问Inno Setup的官方网站下载最新的稳定版本。安装过程就是典型的Windows程序安装一路“Next”即可。安装完成后你会在开始菜单看到两个主要程序Inno Setup Compiler 这是核心的编译器用于将我们编写的.iss脚本文件编译成最终的安装程序.exe文件。它通常以命令行方式工作。Inno Setup 这是一个带有图形界面的脚本编辑器它内置了脚本向导、语法高亮、错误检查和编译功能对新手非常友好。我们后续的教程将主要使用这个IDE。安装好后建议顺手配置一下。打开Inno Setup IDE在Tools-Configure Tools...里可以添加一些常用外部工具比如你喜欢的文本编辑器如VSCode的路径方便快速跳转编辑。不过对于初学者直接用自带的IDE就足够了。2.2 使用脚本向导生成基础框架对于第一个安装包我强烈建议使用内置的“脚本向导”Script Wizard。它能通过一系列图形化问答帮你生成一个结构完整、可直接编译的基础脚本。这是理解脚本结构最快的方式。打开Inno Setup IDE点击菜单栏的File-New选择“Create a new script file using the Script Wizard”。应用程序信息 向导会一步步引导你。首先填写应用程序的基本信息Application Name: DataProcessor 你的软件名称Application Version: 1.0.0Application Publisher: Your Company Name (可选)Application Website: http://www.example.com/ (可选) 这些信息会显示在安装程序的标题栏、安装目录建议路径以及控制面板的“程序和功能”列表中。应用程序目录与文件 接下来指定应用程序的主执行文件.exe位置以及需要打包的其他文件如DLL、配置文件、资源文件。向导会帮你生成对应的[Files]段代码。这里选择你的DataProcessor.exe以及它依赖的libssl.dll,libcrypto.dll等文件。安装程序特性 你可以选择是否创建开始菜单文件夹、桌面快捷方式。向导会生成[Icons]段代码。安装模式与语言 选择安装程序的界面语言如简体中文以及安装模式通常选“Custom”和“Full”两种。编译设置 最后向导会让你指定输出目录和安装包文件名。完成后点击“Finish”IDE会自动生成一个完整的.iss脚本文件。现在不要急着编译。我们先来仔细阅读一下这个由向导生成的脚本理解每一部分的作用。这是从“会用”到“精通”的关键一步。2.3 解剖麻雀理解.iss脚本的核心结构向导生成的脚本类似于下面这样我已做了精简和注释; 注释以分号开头。这是一个Inno Setup脚本示例。 #define MyAppName DataProcessor #define MyAppVersion 1.0.0 #define MyAppPublisher My Company, Inc. #define MyAppURL http://www.example.com/ #define MyAppExeName DataProcessor.exe [Setup] ; 安装程序全局设置段 AppId{{你的GUID} ; 唯一标识符控制面板卸载用。可以用Tools-Generate GUID生成新的。 AppName{#MyAppName} AppVersion{#MyAppVersion} AppPublisher{#MyAppPublisher} AppPublisherURL{#MyAppURL} AppSupportURL{#MyAppURL} AppUpdatesURL{#MyAppURL} DefaultDirName{autopf}\{#MyAppName} ; 默认安装路径{autopf}代表Program Files DefaultGroupName{#MyAppName} ; 默认开始菜单程序组名称 AllowNoIconsyes ; 是否允许用户不创建图标 OutputDiruserdocs:Inno Setup Examples Output ; 编译输出目录 OutputBaseFilenameDataProcessorSetup ; 输出安装包文件名不含.exe Compressionlzma2/ultra ; 压缩方式lzma2平衡了速度和压缩率 SolidCompressionyes ; 固体压缩让安装包更小 WizardStylemodern ; 安装向导样式modern是Win10/Win11风格 [Languages] ; 定义安装程序界面语言 Name: english; MessagesFile: compiler:Default.isl Name: chinesesimplified; MessagesFile: compiler:Languages\ChineseSimplified.isl [Tasks] ; 定义用户可选任务如创建桌面图标 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked [Files] ; 这是核心定义所有需要安装的文件 Source: D:\Dev\DataProcessor\DataProcessor.exe; DestDir: {app}; Flags: ignoreversion Source: D:\Dev\DataProcessor\*.dll; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs ; {app} 代表用户选择的安装目录 ; ignoreversion: 安装时忽略文件版本检查直接覆盖。 ; recursesubdirs createallsubdirs: 递归包含子目录并在目标位置创建相同目录结构。 [Icons] ; 定义创建的快捷方式 Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName} Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe} Name: {autodesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon ; {group}: 开始菜单程序组路径 ; {autodesktop}: 桌面路径 ; {uninstallexe}: 卸载程序路径 [Run] ; 安装结束后运行的程序 Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, , )}}; Flags: nowait postinstall skipifsilent ; nowait: 不等待程序结束 ; postinstall: 在安装成功完成后运行 ; skipifsilent: 如果是静默安装则跳过理解了这个基础框架你就掌握了Inno Setup 80%的常用功能。接下来点击IDE工具栏上的“编译”按钮那个有“Play”图标的按钮如果没有语法错误就会在OutputDir指定的目录下生成一个DataProcessorSetup.exe文件。双击运行它一个完整的安装过程就展现在你面前了。3. 进阶实战满足复杂需求的脚本编写技巧基础安装包能工作了但真实项目的要求往往更复杂。比如我们需要检测用户是否安装了.NET Framework运行时需要根据用户选择安装不同的组件需要在安装前后执行自定义操作如停止服务、修改配置文件甚至需要制作多语言安装包。这些都需要我们深入脚本的各个段落。3.1 条件安装与组件化假设我们的DataProcessor软件有一个“高级分析模块”它依赖一个额外的、体积较大的数据文件AdvancedModule.dat并且只对专业用户开放。我们不希望所有用户都强制安装它。这时就需要用到[Components]和[Types]段并结合[Files]段的条件安装。[Types] ; 定义安装类型给用户一个快速选择 Name: full; Description: 完全安装 Name: compact; Description: 精简安装 Name: custom; Description: 自定义安装; Flags: iscustom [Components] ; 定义可选的组件 Name: main; Description: 主程序文件; Types: full compact custom; Flags: fixed Name: advanced; Description: 高级分析模块; Types: full; ExtraDiskSpaceRequired: 157286400 ; 150MB [Files] ; 主程序文件属于“main”组件固定安装 Source: DataProcessor.exe; DestDir: {app}; Components: main; Flags: ignoreversion ; 高级模块文件属于“advanced”组件仅在用户选中该组件时安装 Source: AdvancedModule.dat; DestDir: {app}\data; Components: advanced; Flags: ignoreversion在安装界面用户就可以在“选择组件”页面看到“高级分析模块”的复选框。只有勾选了它对应的.dat文件才会被复制。ExtraDiskSpaceRequired参数会告诉安装程序这个组件需要额外150MB空间安装程序会自动检查磁盘剩余空间。3.2 环境检测与前置条件检查这是非常关键的一步能极大减少用户安装后无法运行的报错。使用[Code]段编写Pascal脚本在安装开始前进行检查。例如检查是否安装了特定版本的.NET Framework。Inno Setup自带了一个辅助函数IsDotNetInstalled但我们需要先声明它。更通用的方法是检查注册表或文件。[Code] function InitializeSetup(): Boolean; var dotNetVersion: String; requiredVersion: String; begin requiredVersion : 4.8; // 我们需要的.NET版本 Result : True; // 默认允许安装 // 方法1通过注册表检查以.NET 4.8为例 if RegQueryStringValue(HKLM, SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full, Release, dotNetVersion) then begin // Release值大于或等于528040表示.NET 4.8或更高 if StrToIntDef(dotNetVersion, 0) 528040 then begin MsgBox(此软件需要 Microsoft .NET Framework 4.8 或更高版本。#13#13请先安装.NET Framework然后重新运行安装程序。, mbCriticalError, MB_OK); Result : False; // 阻止安装继续 end; end else begin // 连注册表项都找不到说明根本没安装.NET 4.x MsgBox(未检测到所需的 .NET Framework 运行时。#13#13此软件需要 Microsoft .NET Framework 4.8 或更高版本。, mbCriticalError, MB_OK); Result : False; end; end;InitializeSetup函数在安装向导显示之前运行如果返回False安装程序会直接退出。你还可以在这里检查操作系统版本、可用磁盘空间、是否已安装旧版本等。3.3 注册表操作、服务管理与自定义页面除了复制文件安装程序经常需要操作注册表、安装Windows服务。注册表操作 ([Registry]段):[Registry] ; 在HKCU下创建一个键存储安装路径供软件自身读取 Root: HKCU; Subkey: Software\MyCompany\DataProcessor; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey ; uninsdeletekey: 卸载时删除此注册表键 ; 创建文件关联 Root: HKCR; Subkey: .dproc; ValueType: string; ValueName: ; ValueData: DataProcessor.File; Flags: uninsdeletekey Root: HKCR; Subkey: DataProcessor.File; ValueType: string; ValueName: ; ValueData: DataProcessor Data File; Flags: uninsdeletekey Root: HKCR; Subkey: DataProcessor.File\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\DataProcessor.exe,0 Root: HKCR; Subkey: DataProcessor.File\shell\open\command; ValueType: string; ValueName: ; ValueData: {app}\DataProcessor.exe %1服务管理: 对于需要安装为Windows服务的程序可以使用[Run]段配合sc.exe命令或者在[Code]段调用Windows API。更优雅的方式是使用Inno Setup的[Run]段Flags的runhidden和waituntilterminated并配合ssCreate等参数需仔细查阅文档但通常更推荐在软件首次运行时或通过单独的配置工具来安装服务。自定义页面: 如果你需要收集更多用户信息比如许可证密钥、服务器地址等可以创建自定义向导页面。这完全在[Code]段中实现需要创建TWizardPage添加TLabel,TEdit等控件并处理页面事件。这是一个相对高级的话题但Inno Setup的官方示例和社区有大量现成代码可以参考。4. 调试、优化与打包实战中的避坑指南脚本写好了编译也通过了但生成的安装包用起来总有些小毛病这是最考验经验的地方。下面分享几个我踩过坑才总结出来的要点。4.1 路径与变量理解{app},{src},{tmp}的区别{app}: 用户选择的应用程序安装目录。这是最常用的。{src}: 安装包自身所在的目录。如果你把一些配置文件放在安装包同级目录想在安装时读取就用这个。{tmp}: 安装程序解压临时文件的目录。这个目录在安装结束后会被自动清理。重要如果你在[Run]段或[Code]段运行一个位于{tmp}的文件必须确保该文件在[Files]段被标记为Flags: deleteafterinstall或者你自己在代码中删除它否则可能会被防病毒软件误报。{pf}: Program Files目录的硬编码通常是C:\Program Files。建议使用{autopf}它会根据系统是32位还是64位自动选择Program Files或Program Files (x86)。{commonpf64}: 64位系统的Program Files目录无视安装程序自身位数。在制作纯64位软件安装包时很有用。一个常见错误是混淆{src}和{app}。比如你想在安装时从安装包所在目录读取一个配置文件却用了{app}\config.ini这时{app}目录还不存在肯定会出错。正确的应该是{src}\config.ini。4.2 文件覆盖与版本控制ignoreversion,onlyifdestfileexists,replacesameversion[Files]段的Flags属性是精细控制文件安装行为的关键。ignoreversion:最常用。安装时忽略文件版本直接覆盖目标位置已存在的文件。对于经常更新的DLL或EXE通常用这个。onlyifdestfileexists: 仅当目标位置已存在同名文件时才覆盖。适用于用户可能已修改的配置文件你不想在升级时覆盖用户的配置。replacesameversion: 即使版本号相同也替换。适用于修复了bug但未升版本号的情况。uninsneveruninstall: 卸载时不要删除此文件。用于存放用户数据的文件。实战建议对于主程序EXE和核心DLL使用ignoreversion。对于默认配置文件如default.config使用onlyifdestfileexists并确保第一次安装时通过[Code]段复制一份副本到目标位置如果不存在的话。对于用户数据文件使用uninsneveruninstall。4.3 静默安装与命令行参数对于自动化部署或CI/CD流水线静默安装Silent Install是必须的。Inno Setup安装包支持标准的静默参数。/SILENT或/VERYSILENT: 这两个参数都启用静默安装。/VERYSILENT连进度窗口都不显示更彻底。/SUPPRESSMSGBOXES: 抑制所有消息框。/LOG: 将安装日志写入文件。在静默安装时排查问题非常有用。/DIR”x:\target\path”: 指定安装目录。/COMPONENTS”main,advanced”: 指定要安装的组件。一个典型的自动化安装命令如下DataProcessorSetup.exe /VERYSILENT /SUPPRESSMSGBOXES /LOG”C:\install.log” /DIR”D:\Programs\DataProcessor” /COMPONENTS”main”避坑点在脚本中可以通过{param:DIR|{autopf}\...}来读取命令行传入的目录参数。但要注意静默安装时[Run]段里标记了skipifsilent的项目会被跳过。如果你需要在静默安装后也执行某个操作比如运行一个配置脚本就不要加这个flag。4.4 数字签名与杀毒软件误报未签名的安装包在较新的Windows系统如Win10/11上运行时会弹出“Windows已保护你的电脑”的SmartScreen警告。对于分发给广泛用户的软件建议进行代码签名。你需要购买一个由受信任的根证书颁发机构如DigiCert, Sectigo颁发的代码签名证书。然后在Inno Setup的[Setup]段添加SignToolsigntool并在IDE的Tools-Configure Sign Tools...里配置signtool的路径和签名命令。编译时编译器会自动调用signtool对生成的安装包进行签名。即使签了名有时杀毒软件仍可能误报尤其是安装包使用了高压缩率如lzma2/ultra或包含可执行脚本时。如果遇到这种情况可以将样本提交给各大杀毒厂商进行白名单审核。在开发阶段也可以考虑暂时降低压缩率如改用zip/9进行测试。4.5 调试脚本使用MsgBox和日志当[Code]段里的Pascal脚本行为不符合预期时调试起来不像IDE里设断点那么方便。最朴素的调试方法就是使用MsgBox函数输出变量值。MsgBox(当前安装路径是 ExpandConstant({app}), mbInformation, MB_OK);更系统的方法是写日志文件。Inno Setup提供了一个Log函数但默认可能未启用。你可以在[Setup]段设置SetupLoggingyes这样安装过程会生成一个setup.log文件。在[Code]段你可以用SaveStringToFile函数将自定义信息写入日志。procedure Log(Msg: String); var LogFile: String; begin LogFile : ExpandConstant({app}\install_debug.log); SaveStringToFile(LogFile, Msg #13#10, True); // True表示追加 end; // 在需要的地方调用 Log(InitializeSetup开始执行参数是XXX);通过查看日志文件你可以清晰地追踪脚本的执行流程和变量状态这对于排查复杂的条件逻辑问题至关重要。掌握了这些调试技巧你就能真正驾驭Inno Setup制作出稳定、可靠、符合所有需求的桌面安装程序。

相关新闻

粒子群算法在分布式电源选址定容中的应用与优化

粒子群算法在分布式电源选址定容中的应用与优化

1. 分布式电源规划的现实挑战与粒子群算法优势在能源结构转型的大背景下,分布式电源(Distributed Generation, DG)正逐渐成为配电网中的重要组成部分。与传统集中式发电不同,DG通常指分布在用户侧的小型发电单元,包括光…

2026/8/8 2:58:02 阅读更多 →
OpenClaw:AI Agent基础设施框架,赋能复杂任务执行与工具调用

OpenClaw:AI Agent基础设施框架,赋能复杂任务执行与工具调用

1. 项目概述:当AI Agent遇上“瑞士军刀”最近在AI开发者圈里,OpenClaw这个名字的讨论热度有点高。如果你也在关注AI Agent(智能体)的开发,可能已经不止一次在各种技术社区、项目分享里看到它了。但很多人第一眼看到“O…

2026/8/8 2:58:02 阅读更多 →
LangGraph流式输出实战:从原理到应用,构建丝滑智能体

LangGraph流式输出实战:从原理到应用,构建丝滑智能体

1. 从“卡顿等待”到“丝滑对话”:为什么流式输出是LLM应用的刚需如果你用过早期的聊天机器人,或者尝试过一些本地部署的大语言模型,一定对那种体验记忆犹新:你问了一个问题,然后屏幕就卡在那里,光标闪烁&a…

2026/8/8 2:57:02 阅读更多 →

最新新闻

音视频技术基础:从采集到编码的全面解析

音视频技术基础:从采集到编码的全面解析

1. 音视频技术的基础概念与核心价值在数字媒体技术飞速发展的今天,音视频处理已经成为现代信息技术不可或缺的组成部分。从我们每天使用的社交媒体、视频会议,到专业级的影视制作、直播系统,音视频技术无处不在。理解这些基础理论&#xff0c…

2026/8/8 4:55:51 阅读更多 →
Unity环形布局组件CircleLayout:从原理到实战实现

Unity环形布局组件CircleLayout:从原理到实战实现

1. 项目概述:为什么我们需要一个环形布局组件?在Unity UI开发中,无论是制作游戏内的技能轮盘、角色选择界面,还是应用中的圆形菜单、环形进度展示,我们经常会遇到一个需求:如何让一堆UI元素(比如…

2026/8/8 4:55:51 阅读更多 →
DeepSeek V4全面解析:从API调用到本地部署的实战指南

DeepSeek V4全面解析:从API调用到本地部署的实战指南

1. 项目概述:DeepSeek V4,一个标志性的转折点最近,AI圈子里最热闹的话题,莫过于DeepSeek V4的正式发布。作为一名长期关注并实践AI技术应用的从业者,我第一时间就上手体验了它的API,并尝试了本地部署。说实…

2026/8/8 4:55:51 阅读更多 →
Ubuntu安装搜狗输入法全攻略:Fcitx框架配置与疑难排错

Ubuntu安装搜狗输入法全攻略:Fcitx框架配置与疑难排错

1. 为什么在Ubuntu上安装搜狗输入法是个技术活?如果你刚从Windows或macOS转到Ubuntu,第一件让你抓狂的事情可能就是输入法。系统自带的IBus框架配合拼音输入法,功能简陋、词库老旧、联想迟钝,打一段中文简直是对耐心的终极考验。这…

2026/8/8 4:55:51 阅读更多 →
Feynman架构与NemoClaw平台:AI芯片与智能体开发的革新

Feynman架构与NemoClaw平台:AI芯片与智能体开发的革新

1. 技术革命的双重引爆点:Feynman架构与NemoClaw平台的协同价值2026年3月17日注定成为AI发展史上的关键节点。英伟达在这一天同步发布了两项突破性技术:Feynman芯片架构与NemoClaw开源智能体平台。这并非简单的产品迭代,而是从硬件底层到软件…

2026/8/8 4:55:51 阅读更多 →
Kimi-K3大模型实测:部署、API集成与性能全解析

Kimi-K3大模型实测:部署、API集成与性能全解析

这次我们来看一个近期讨论度很高的模型——Kimi-K3。作为月之暗面(Moonshot AI)推出的最新一代大语言模型,它最引人注目的标签无疑是其庞大的参数规模。但参数大就一定等于“好用”吗?对于开发者、研究者和普通用户而言&#xff0…

2026/8/8 4:54:50 阅读更多 →

日新闻

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

AI多智能体时代来临,读懂MCP与A2A架构,抢占企业数字化新风口

当下AI应用飞速普及,无数企业下场搭建智能体系统,可落地阶段难题接踵而至:上下文无限堆积频繁爆栈、AI工具调用准确率低下、Token成本居高不下、企业数据权限混乱暗藏安全隐患……很多团队卡在架构搭建环节,空有前沿技术概念&…

2026/8/8 0:00:07 阅读更多 →
PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码

PHP二维码生成终极指南:用chillerlan/php-qrcode打造专业级二维码 【免费下载链接】php-qrcode A PHP QR Code generator and reader with a user-friendly API. 项目地址: https://gitcode.com/gh_mirrors/ph/php-qrcode 在当今数字时代,二维码已…

2026/8/8 0:00:08 阅读更多 →
UniApp微信小程序隐私保护组件开发:从原理到实战

UniApp微信小程序隐私保护组件开发:从原理到实战

1. 项目缘起:为什么我们需要一个隐私保护通用组件?最近在维护一个基于uniapp开发的微信小程序矩阵时,我遇到了一个非常棘手的问题。随着平台对用户隐私保护的要求越来越严格,几乎每一个新版本发布,或者在某些特定机型&…

2026/8/8 0:00:08 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/7 23:24:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/7 23:54:54 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →