Inno setup 常用代码收集

1.安装卸载前检测软件是否在运行
说明:安装前用FindWindowByClassName检测迅雷程序是否在运行,注意这个循环语句。
用MicroSoft spy++找有关的程序的ClassName,迅雷的class是TfrmCmdCenter(本人是以TfrmCmdCenter来检测迅雷是否在运行的)。
ps:其实本文没什么创新,只是因为我首次使用MicroSoft spy++来找程序的ClassName,发现那些只在前台运行的程序的ClassName非常好找,而那些可以缩小到系统托盘的软件例如qq和迅雷等就有点麻烦了,没有一定的经验还真不好找,这里要特别感谢似水老大为我指明方向,同时特别感谢9esu朋友给予我的巨大帮助,一并表示感谢。发此贴仅为了让那些刚开始使用此工具的朋友有个参照。好了,闲言少叙,以下是代码。

 

[Code]
var
is_value: integer;
function InitializeSetup(): Boolean;
begin
Result :=true;
is_value:=FindWindowByClassName(‘TfrmCmdCenter’);
while is_value<>0 do
begin
if Msgbox(‘安装程序检测到您的迅雷软件当前正在运行。’ #13#13 ‘您必须先关闭它然后单击“是”继续安装,或按“否”退出!’, mbConfirmation, MB_YESNO) = idNO then
begin
Result :=false; //安装程序退出
is_value :=0;
end else begin
Result :=true; //安装程序继续
is_value:=FindWindowByClassName(‘TfrmCmdCenter’);
end;
end;
end;

function InitializeUninstall(): Boolean;
begin
is_value:=FindWindowByClassName(‘TfrmCmdCenter’);
if is_value<>0 then begin
MsgBox(‘卸载程序检测到您的迅雷软件当前正在运行。’ #13#13 ‘为了更安全完整的卸载,您必须关闭它在进行卸载操作!’, mbError, MB_OK);
Result :=false;
end else Result :=true;
end;

2.自定义安装程序右上角图片大小
[code]
procedure InitializeWizard();
begin
WizardForm.WizardSmallBitmapImage.width:=150; //设置页眉图片的大小
WizardForm.WizardSmallBitmapImage.left:=WizardForm.width-150; //设置左边页眉留出的空隙
WizardForm.PAGENAMELABEL.width:=0; //设置标题文字显示的大小
WizardForm.PAGEDESCRIPTIONLABEL.width:=0; //设置标题文字显示的大小
end;

3.跳关安装程序的欢迎界面
INNO 的设计中本身可以跳过所有向导页面(用 ShouldSkipPage 函数),但是唯独不能跳过欢迎页面,据说作者是有意为了防止该功能被滥用,即产生完全没有界面的在后台运行的安装程序。
要跳过欢迎页面,只能调用系统的功能。

参考一
复制内容到剪贴板代码:
[Code]
const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard();
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
// 其它代码
end;
参考二
复制内容到剪贴板代码:
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
WizardForm.NextButton.OnClick(WizardForm);
end;
两者都能跳过欢迎页面

4.跳过准备安装界面
使用inno打包,我们会注意到,在选择好安装向导所指定的所有项目后,安装向导会进入一个准备安装的界面提示你所有的安装信息。此时,我们只能点击安装按钮,安装才可以继续。有时候,为了某种需要,我们可能不想让程序显示这个准备安装的界面,那么如何去掉这个界面呢?请看以下的代码:
[code]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID=wpReady then
result := true;
end;

5.判断注册表检查程序时候存在
有时候,我们制作软件的汉化或者补丁程序,需要判断软件是否已安装,如果软件已安装就安装此补丁,如果软件未安装就终止安装程序并且提示用户安装原版软件后再运行此补丁,那么如何实现此功能呢,这里就给大家提供一个我的判断实力。通过检查注册表相关键值来判断指定程序是否已安装,以下是我制作的一个程序的增强补丁,需要在源程序安装的基础上进行安装,具体脚本判断如下:
[CODE]
var
MyKeyExist: boolean;

function InitializeSetup(): boolean;
begin
MyKeyExist:= true;
if Not RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE/Adobe/Audition/3.0', 'ApplicationPath') then
begin
MyKeyExist:= false;
MsgBox('安装程序检测到您的系统内没有安装Adobe Audition3.0,请先安装软件在运行此补丁。', mbInformation, MB_OK);
end;
Result:= MyKeyExist;
end;

6.如何让协议许可页面默认选中我同意按钮
为了让初学者更方便的安装软件,有时候我们会发现一些使用inno setup打包的程序在许可页面默认已经选中了我同意按钮,只需要点击下一步即可继续安装,那么这个效果是如何实现的呢?下面是代码:
[code]
procedure InitializeWizard();
begin
WizardForm.LICENSEACCEPTEDRADIO.Checked := true;
end;

7.安装前检测是否已经安装
function InitializeSetup(): boolean;
begin
Result := true;
if FileExists(ExpandConstant('{pf}/我的程序/我的程序.exe')) then
begin
MsgBox('程序已经安装在你的系统中了,请先卸载!', mbInformation, MB_OK );
Result := false;
end;
end;
其中{pf}/我的程序/我的程序.exe替换为你自己的路径即可
加入此代码的含义,就是检测目录下是否包括代码中指定的文件名的文件,如果有则当您运行程序后直接弹出提示告诉您软件已经存在,请先卸载。因此,这个代码有个局限性,就是只能检测固定的目录的文件,如果用户的文件并未安装到脚本所指定的检测目录,那么就将无法检测到。所以,判断也就失效了。

<think>我们正在处理用户关于“如何创建Windows软件安装包”的查询。根据引用内容,用户之前提到的是关于如何校验下载的安装包(使用certutil工具进行SHA512校验),但用户现在明确表示其真实意图是了解创建Windows软件安装包的方法。 因此,我们需要提供创建Windows软件安装包的步骤和方法。注意,用户可能希望了解从零开始打包一个Windows应用程序的过程,包括可执行文件、依赖项、资源文件等,并生成一个可以分发的安装包(如.msi或.exe格式)。 创建Windows安装包通常涉及以下步骤: 1. 准备应用程序:确保应用程序已经编译完成,并且包含所有必要的文件(可执行文件、动态链接库、配置文件、资源文件等)。 2. 选择安装包创建工具:常用的工具有WiX Toolset(基于XML的开源工具,生成.msi安装包)、Inno Setup(免费脚本驱动的安装系统,生成.exe安装包)、NSIS(Nullsoft Scriptable Install System,开源脚本驱动的安装工具)等。 3. 编写安装脚本或配置文件:根据所选工具,编写相应的脚本或配置文件,指定安装过程中的各种操作(如文件复制、创建快捷方式、注册COM组件、写入注册表、安装运行时环境等)。 4. 构建安装包:运行工具生成安装包。 5. 测试安装包:在干净的测试环境中测试安装包,确保安装、卸载过程正确无误,应用程序能够正常运行。 下面我们将详细介绍使用WiX Toolset和Inno Setup两种流行工具创建安装包的基本步骤。 ### 方法一:使用WiX Toolset创建.msi安装包 WiX (Windows Installer XML) 是一套用于创建Windows安装包的工具集,它通过编写XML文档来定义安装过程。 **步骤:** 1. 下载并安装WiX Toolset:从 [WiX Toolset官网](https://wixtoolset.org/) 下载最新的稳定版本并安装。 2. 准备应用程序文件:假设我们的应用程序文件位于`C:\MyApp`目录下,包含`MyApp.exe`和一些依赖的DLL和资源文件。 3. 创建WiX项目:打开命令提示符,使用`heat`工具(WiX工具之一)收集文件信息并生成一个包含这些文件的WXS文件(WiX源文件)。例如: ```cmd heat dir "C:\MyApp" -cg AppFiles -gg -sf -sreg -out "Files.wxs" ``` 此命令会扫描`C:\MyApp`目录,生成一个`Files.wxs`文件,其中包含了该目录下所有文件的引用。 4. 创建主WXS文件:手动编写一个主WXS文件(例如`Product.wxs`),定义产品信息、安装目录、快捷方式等。以下是一个简单示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="My Application" Language="1033" Version="1.0.0.0" Manufacturer="My Company" UpgradeCode="PUT-GUID-HERE"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <MediaTemplate /> <Feature Id="ProductFeature" Title="My Application" Level="1"> <ComponentGroupRef Id="AppFiles" /> </Feature> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLFOLDER" Name="My Application"> <!-- 这里引用Files.wxs中生成的目录结构 --> </Directory> </Directory> </Directory> </Product> </Wix> ``` 注意:需要将`Files.wxs`中生成的`<Fragment>`部分中的`<ComponentGroup>`引用到主文件中(通过`<ComponentGroupRef>`)。 5. 编译和链接:使用WiX的编译器(`candle.exe`)和链接器(`light.exe`)生成.msi文件。在命令提示符中执行: ```cmd candle.exe Product.wxs Files.wxs light.exe Product.wixobj Files.wixobj -out MyAppInstaller.msi ``` 执行成功后,将生成`MyAppInstaller.msi`安装包。 ### 方法二:使用Inno Setup创建.exe安装Inno Setup是一个免费的安装制作工具,支持创建.exe安装包,具有简单易学的脚本语言。 **步骤:** 1. 下载并安装Inno Setup:从 [Inno Setup官网](http://www.jrsoftware.org/isdl.php) 下载并安装。 2. 编写脚本:使用Inno Setup脚本语言(.iss文件)定义安装过程。以下是一个简单示例: ```iss ; 示例脚本.iss [Setup] AppName=My Application AppVersion=1.0 DefaultDirName={pf}\My Application OutputDir=userdocs:Inno Setup Examples Output OutputBaseFilename=MyAppSetup [Files] Source: "C:\MyApp\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs [Icons] Name: "{group}\My Application"; Filename: "{app}\MyApp.exe" ``` 该脚本指定了应用程序名称、版本、默认安装目录,并将`C:\MyApp`下的所有文件复制到安装目录,同时创建开始菜单快捷方式。 3. 编译脚本:打开Inno Setup,选择“文件”>“打开”,然后选择上述脚本文件,再选择“构建”>“编译”。或者使用命令行编译: ```cmd "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "C:\path\to\script.iss" ``` 编译成功后,将在输出目录生成一个.exe安装包。 ### 测试安装包 无论使用哪种工具,生成的安装包都应在干净的Windows环境中进行测试,确保安装过程顺利,应用程序能够正常运行,并且卸载程序能够完全清除安装的文件和注册表项。 ### 签名安装包 为了确保安装包在分发过程中不被篡改,并提高用户信任度,建议对安装包进行数字签名。可以使用代码签名证书(如从DigiCert、Sectigo等机构购买)和签名工具(如`signtool.exe`)进行签名。 签名命令示例(使用signtool,需要提前安装Windows SDK): ```cmd signtool sign /f MyCert.pfx /p password /t http://timestamp.digicert.com MyAppInstaller.msi ``` ### 总结 创建Windows安装包的主要步骤包括准备应用程序文件、选择合适的打包工具、编写安装脚本、构建安装包、测试以及签名。根据需求,可以选择生成.msi格式(适合企业部署)或.exe格式(适合普通用户)的安装包。 §§相关问题§§ 1. WiX Toolset和Inno Setup的主要区别是什么? 2. 如何为Windows安装包添加自定义安装步骤(如安装前检查.NET Framework)? 3. 如何对Windows安装包进行数字签名?</think>### 创建Windows软件安装包的步骤和方法 创建Windows软件安装包需要经过以下关键步骤,使用专业工具可简化流程: #### 一、核心步骤 1. **准备应用程序文件** - 编译源代码生成可执行文件(`.exe`) - 收集所有依赖项(DLL、配置文件、资源文件等) - 创建必要的目录结构(如`/bin`, `/lib`, `/docs`) 2. **选择打包工具**(推荐三种主流方案): ```mermaid graph LR A[打包工具] --> B[WiX Toolset] A --> C[Inno Setup] A --> D[NSIS] ``` **方案1:WiX Toolset(微软官方推荐)** - 特点:基于XML的声明式安装包生成,生成`.msi`格式 - 步骤: 1. 安装[WiX Toolset](https://wixtoolset.org/) 2. 编写XML配置文件(`.wxs`): ```xml <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="MyApp" Language="1033" Version="1.0.0.0"> <Package InstallerVersion="200" Compressed="yes"/> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="INSTALLDIR" Name="MyApp"> <Component Id="MainExecutable" Guid="YOUR-GUID-HERE"> <File Source="MyApp.exe"/> </Component> </Directory> </Directory> </Directory> </Product> </Wix> ``` 3. 编译命令:`candle myapp.wxs` → `light myapp.wixobj` **方案2:Inno Setup(免费/脚本驱动)** - 特点:生成`.exe`安装包,支持Pascal脚本 - 步骤: 1. 安装[Inno Setup](https://jrsoftware.org/isdl.php) 2. 编写脚本文件(`.iss`): ```iss [Setup] AppName=MyApp AppVersion=1.0 DefaultDirName={pf}\MyApp [Files] Source: "MyApp.exe"; DestDir: "{app}" ``` 3. 通过IDE或命令行编译:`ISCC.exe myapp.iss` **方案3:NSIS(开源灵活)** - 特点:脚本控制能力强,适合高级定制 - 示例脚本: ```nsis Outfile "MyApp_Installer.exe" InstallDir "$PROGRAMFILES\MyApp" Section SetOutPath $INSTDIR File "MyApp.exe" SectionEnd ``` 3. **添加安装功能**(关键扩展项): - 创建开始菜单快捷方式 - 注册表项配置(如文件关联) - 安装运行时依赖(如.NET Framework/VCRedist) - 添加卸载程序 4. **数字签名**(安全必备) 使用`SignTool`进行代码签名: ```cmd signtool sign /f mycert.pfx /p password /fd SHA256 MyApp_Installer.exe ``` 5. **测试与验证** - 在纯净虚拟机中测试安装/卸载流程 - 使用校验和验证文件完整性: ```cmd certutil -hashfile MyApp_Installer.exe SHA256 ``` #### 二、最佳实践 1. **版本管理**:每次更新修改`ProductVersion`(WiX)或`AppVersion`(Inno Setup) 2. **增量更新**:通过`UpgradeCode`(WiX)实现版本升级 3. **多语言支持**:使用`<UIRef Id="WixUI_Multilingual"/>`(WiX)或`[Languages]`段(Inno Setup) 4. **静默安装**:支持`/S`参数(NSIS/Inno Setup)或`msiexec /qb`(WiX) #### 三、工具对比表 | 工具 | 输出格式 | 学习曲线 | 签名支持 | 企业级功能 | |-------------|----------|----------|----------|------------| | WiX Toolset | .msi | 陡峭 | ✓ | ✓(组策略部署)| | Inno Setup | .exe | 中等 | ✓ | 基础功能 | | NSIS | .exe | 陡峭 | ✓ | 高度定制化 | > 提示:对于商业软件,建议使用WiX生成符合Windows Installer规范的MSI包,便于企业环境部署[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值