Inno Setup 打包创建自定义后缀名的文件

最近公司需要实现这样一个需求:用户双击即可打开我们公司自定义的文件,如abc.yoya,我使用了Inno Setup编译器(版本5.5.5)。由于第一次使用Inno Setup 编译器,使用过程中遇到了不少问题,但经过几天的短暂接触使用和测试,现在已经基本实现需求。现在将我的安装脚本(完整)和经验跟大家分享学习。脚本功能包括:安装协议,开始菜单快捷方式,桌面快捷方式,自定义文件类型,更改卸载图标和卸载名称,安装前的版本检测,修改注册表等。

一. 定义全局默认值和配置初始化信息

配置脚本如下:

; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档!
; 定义基本参数,如应用名称,应用版本号,发布者名称,发布者主页,应用唯一ID值(该值用于在计算机注册表中作为该应用的唯一标识)
#define MyAppName "优芽互动电影播放器"
#define MyAppVersion "1.0"
#define MyAppPublisher "厦门优芽网络科技有限公司"
#define MyAppURL "http://www.yoya.com/"
#define APPID "YoyaPlay"

[Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。也可以自定义,如YoyaPlay)
AppId={#APPID}
; 程序名
AppName={#MyAppName}
;程序版本号
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}{#MyAppVersion}
;发布者
AppPublisher={#MyAppPublisher}
;相关连接
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
;默认安装目录
DefaultDirName={pf}\YoyaPlay
;默认开始菜单名
DefaultGroupName=YoyaPlay                  
;安装协议
LicenseFile=F:\9辅助软件\inno setup\Inno Setup 5\Examples\Readme.txt
;输出文件夹与文件名
OutputDir=C:\Users\netinnet\Desktop
OutputBaseFilename=setup
;安装图标
SetupIconFile=C:\Users\netinnet\Desktop\nw_32bit\yoya.ico
;卸载图标
Uninstallable=true
UninstallDisplayIcon={app}\yoya.ico
;压缩相关
Compression=lzma
SolidCompression=yes
;安装完成后要求重启,因为要刷新注册表,这样自定义的文件就不会被杀毒软件误认为是无效快捷方式
AlwaysRestart=yes
;备注版本信息
VersionInfoCompany=http://www.yoya.com/ 
VersionInfoDescription=优芽互动电影播放器  
VersionInfoVersion=1.0
VersionInfoCopyright=Copyright (C)2014

二. 定义使用语言、文件位置和提示消息

配置脚本如下:

;使用语言
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"

[Files]
;注意: 不要在任何共享系统文件上使用“Flags: ignoreversion”
;我的应用程序位置,包括exe应用程序,ico图标,dll动态链接库等
Source: "C:\Users\netinnet\Desktop\nw_32bit\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
;卸载图标位置
Source: "C:\Users\netinnet\Desktop\nw_32bit\uninstall.ico"; Flags: solidbreak dontcopy
;卸载插件位置
Source: "C:\Users\netinnet\Desktop\nw_32bit\UpdateIcon.dll"; Flags: solidbreak dontcopy 

[Messages]
BeveledLabel=优芽互动电影播放器  
;卸载对话框说明  
ConfirmUninstall=您真的想要从电脑中卸载优芽互动电影播放器吗?%n%n按 [是] 则完全删除 %1 以及它的所有组件;%n按 [否]则让软件继续留在您的电脑上. 

三.  自定义注册表,开始菜单和桌面快捷方式

我的应用无需开始菜单和桌面快捷方式,故此处注释掉该部分代码:

;自定义注册表,用于在用户系统中创建,修改或删除注册表健值
[Registry]
Root: HKLM; Subkey: Software\YoyaPlay; ValueType: string; ValueName: Installed version; ValueData: '1.0'; Flags: uninsdeletekey
Root: HKCR; Subkey: "YoyaPlay"; ValueType: String; ValueData: "优芽网媒体文件";Flags: uninsdeletekey
Root: HKCR; Subkey: "YoyaPlay\DefaultIcon"; ValueType: String; ValueData: "{app}\yoyafile.ico";Flags: uninsdeletekey
Root: HKCR; Subkey: "YoyaPlay\shell\open\command"; ValueType: String; ValueData: "{app}\YoyaPlay.exe %1";Flags: uninsdeletekey
Root: HKCR; Subkey: ".yoya"; ValueType: String; ValueData: "YoyaPlay";Flags: uninsdeletekey

;任务列表   
;[Tasks]
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked  
;Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked  

;开始菜单,桌面快捷方式  
;[Icons]  
;Name: "{group}\YoyaPlay"; Filename: "{app}\YoyaPlay.exe"  
;Name: "{group}\{cm:ProgramOnTheWeb,YoyaPlay}"; Filename: "http://www.yoya.com"  
;Name: "{group}\{cm:UninstallProgram,YoyaPlay}"; Filename: "{app}\YoyaUninstall.exe"  
;Name: "{commondesktop}\YoyaPlay"; Filename: "{app}\YoyaPlay.exe"; Tasks: desktopicon  
;Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\YoyaPlay"; Filename: "{app}\YoyaPlay.exe"; Tasks: quicklaunchicon      

四. 执行代码

安装过程逻辑脚本:

;在执行脚本  
[code]
function GetInstalledVersion(): String;
var InstalledVersion: String;
begin
  InstalledVersion :='';
  RegQueryStringValue(HKLM, 'Software\YoyaPlay', 'Installed version', InstalledVersion);
  Result := InstalledVersion;
end;

function InitializeSetup(): Boolean;
var PrevVer: String;
begin
  PrevVer := GetInstalledVersion();
  result := true;
  if length(PrevVer) > 0 then 
  begin
    //如果发现程序已经安装过了
    MsgBox ('本程序的 ' + PrevVer + ' 版本已经安装,请卸载后再安装本程序. 安装程序将关闭.', mbError, MB_OK);
    result := false;
  end;
end;
//插件函数用法
//参数: 句柄(插件错误对话框的父句柄), exe文件完整路径名称, (exe文件中要替换的)图标资源名称, 图标文件的完整路径名称, (exe中要替换的图标资源所在)语系
//返回值: 成功 = True, 失败 = False
//安装初始化
function UpdateIcon(const hWnd: Integer; const exeFileName, exeIcon, IcoFileName: String; wlangID: DWORD): Boolean;
external 'UpdateIcon@files:UpdateIcon.dll stdcall';
//替换卸载程序的图标
function UpdateUninstIcon(const IcoFileName: String): Boolean;
begin 
  //要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!其它参数类似!
  Result:= UpdateIcon(MainForm.Handle, '', '', IcoFileName, 0); //替换卸载图标
end;
procedure CurStepChanged(CurStep: TSetupStep);
var uninspath, uninsname, NewUninsName, MyAppName,sIcon: String;

begin
  //注意: 替换卸载程序的图标,必须是在卸载程序生成之前!
  //建议安装图标与卸载图标的格式与大小一致,否则可能会导致卸载程序出错!
  if CurStep=ssInstall then
    begin
    sIcon:= ExpandConstant('{tmp}\uninstall.ico'); //定义卸载图标
    //ExtractTemporaryFile('UpdateIcon.dll');//该动态链接库可网上查找
    ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标
    //要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!
    UpdateUninstIcon(sIcon) //替换卸载图标
    end;
  if CurStep=ssDone then
    begin
    // 指定新的卸载文件名(不包含扩展名),请相应修改!  
    NewUninsName := 'YoyaUninstall';  
    // 应用程序名称,与 [SEUTP] 段的 AppName 必须一致,请相应修改!  
    MyAppName := '优芽互动电影播放器';  
    // 以下重命名卸载文件  
    uninspath:= ExtractFilePath(ExpandConstant('{uninstallexe}'));  
    uninsname:= Copy(ExtractFileName(ExpandConstant('{uninstallexe}')),1,8);  
    RenameFile(uninspath + uninsname + '.exe', uninspath + NewUninsName + '.exe');  
    RenameFile(uninspath + uninsname + '.dat', uninspath + NewUninsName + '.dat'); 
    end; 
    // 以下修改相应的注册表内容
    if RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1') then
    begin
    RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1', 'UninstallString', '"' + uninspath + NewUninsName + '.exe"');
    RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#APPID}_is1', 'QuietUninstallString', '"' + uninspath + NewUninsName + '.exe" /SILENT');
    end;   
end;

如果想要在程序安装过程中或之后执行某批处理或打开某应用,可使用一下语句:

[Run]
Filename: "{app}\Reflash.bat"; Description: "正在刷新注册表"; Flags: runhidden;

至此大功告成,另外,所使用的ICO图标尺寸建议用128*128 。

应用图标:

安装过程:

卸载相关:

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Inno Setup打包MySQL 8.0.30,首先需要下载MySQL的安装程序和Inno Setup软件。 1. 下载MySQL 8.0.30安装程序:进入MySQL官方网站,找到下载页面,下载MySQL 8.0.30的安装程序。保存到本地目录。 2. 下载Inno Setup软件:进入Inno Setup的官方网站,找到下载页面,下载最新版本的Inno Setup软件。保存到本地目录,并安装在你的电脑上。 3. 创建Inno Setup脚本文件:使用文本编辑器,新建一个空的文本文件。将以下代码复制到该文件中: ``` [Setup] AppName=MySQL 8.0.30 AppVersion=8.0.30 DefaultDirName={pf}\MySQL\MySQL Server 8.0 DefaultGroupName=MySQL AllowNoIcons=yes OutputDir=userdocs:Inno Setup Examples Output [Files] Source: "C:\path\to\mysql-8.0.30-installer.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall [Run] Filename: "{tmp}\mysql-8.0.30-installer.exe"; Parameters: "--install-server"; WorkingDir: "{tmp}"; StatusMsg: "Installing MySQL 8.0.30, please wait..." [UninstallDelete] Type: files; Name: "{app}\unins000.dat" Type: files; Name: "{app}\unins000.exe" [Tasks] Name: "desktopicon"; Description: "Create a desktop icon"; GroupDescription: "Additional tasks:"; Flags: unchecked [Icons] Name: "{commondesktop}\MySQL 8.0.30"; Filename: "{app}\{#MyAppExeName}" [Run] Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent ``` 4. 修改脚本文件中的路径:将代码中的"C:\path\to\mysql-8.0.30-installer.exe"修改为你自己保存MySQL安装程序的路径。 5. 保存脚本文件:将该文本文件保存为任意名称的脚本文件,并将文件后缀改为.iss。 6. 编译安装程序:在Inno Setup安装目录中,找到并运行Inno Setup编译器(iscc.exe)。在编译器中选择刚才保存的脚本文件,并点击编译按钮。将会生成一个名为setup.exe的安装程序。 7. 运行安装程序:双击生成的setup.exe文件,按照安装程序的提示和选项进行MySQL的安装。 通过以上步骤,你就可以使用Inno Setup打包MySQL 8.0.30,并生成一个可执行的安装程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值