本文主要是介绍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;
beginInstalledVersion :='';RegQueryStringValue(HKLM, 'Software\YoyaPlay', 'Installed version', InstalledVersion);Result := InstalledVersion;
end;function InitializeSetup(): Boolean;
var PrevVer: String;
beginPrevVer := 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 thenbeginsIcon:= ExpandConstant('{tmp}\uninstall.ico'); //定义卸载图标//ExtractTemporaryFile('UpdateIcon.dll');//该动态链接库可网上查找ExtractTemporaryFile(ExtractFileName(sIcon)); //释放卸载图标//要替换图标的exe文件路径名称留空,则插件会自动替换掉Inno卸载程序的图标!UpdateUninstIcon(sIcon) //替换卸载图标end;if CurStep=ssDone thenbegin// 指定新的卸载文件名(不包含扩展名),请相应修改! 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') thenbeginRegWriteStringValue(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 。
应用图标:
安装过程:
卸载相关:
这篇关于Inno Setup 打包创建自定义后缀名的文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!