正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问题描述:
在一些插件或汉化文件包装时,需要对多个软件版本进行检索遍历,这就涉及到多版本的判断和安装文件夹与安装文件的对应安装,除了组件的分类安装外,还想自行根据注册表变化来智能判断。最终的目的是实现软件的智能化判断与释放文件。在开始打包前,需要对逻辑进行梳理,才能更好地理解所想要的操作,在编码时才能做到心中有数和达到想要的效果。下面只是列举了一个样本仅供参考,更多需求需要更加用户或打包者的主观意志来决定。
- function InitializeSetup (): Boolean;
- var
- i: integer;
- begin
- Result := False;
- for i := 5 to 9
- begin
- if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\ IntToStr\Installer','Path') then begin
- Result := True;
- break;
- end;
- end;
- begin
- if Result = False then begin
- MsgBox('检测到没有安装原版,请先安装原版。', mbInformation, MB_OK);
- end;
- end;
- [Tasks]
- Name: K5; Description: 安装插件到版本5.0; Flags: checkablealone;
- Name: K6; Description: 安装插件到版本6.0; Flags: checkablealone;
- Name: K7; Description: 安装插件到版本7.0; Flags: checkablealone;
- Name: K8; Description: 安装插件到版本8.0; Flags: checkablealone;
- Name: K9; Description: 安装插件到版本9.0; Flags: checkablealone;
- [Files]
- Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\5.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K5
- Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\6.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K6
- Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\7.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K7
- Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\8.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K8
- Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\9.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K9
复制代码
改变
- [Setup]
- AppName=My Program
- AppVerName=My Program version 1.5
- DefaultDirName={pf}\My Program
- DisableProgramGroupPage=yes
- UninstallDisplayIcon={app}\MyProg.exe
- OutputDir=userdocs:Inno Setup Examples Output
- [Files]
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\5.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K5
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\6.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K6
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\7.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K7
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\8.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K8
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\9.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K8
- [Tasks]
- Name: K5; Description: 安装插件到版本5.0; Flags: unchecked ; check: CheckVersion('5.0')
- Name: K6; Description: 安装插件到版本6.0; Flags: unchecked ; check: CheckVersion('6.0')
- Name: K7; Description: 安装插件到版本7.0; Flags: unchecked ; check: CheckVersion('7.0')
- Name: K8; Description: 安装插件到版本8.0; Flags: unchecked ; check: CheckVersion('8.0')
- Name: K9; Description: 安装插件到版本9.0; Flags: unchecked ; check: CheckVersion('9.0')
- [code]
- function InitializeSetup (): Boolean;
- var
- i: integer;
- begin
- Result := False;
- for i := 5 to 9 do
- begin
- if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + IntToStr(i) + '.0\Installer','Path') then begin
- Result := True;
- break;
- end;
- end;
- begin
- if Result = False then begin
- MsgBox('检测到没有安装原版,请先安装原版。', mbInformation, MB_OK);
- end;
- end;
- end;
- function CheckVersion(Version: string): Boolean;
- begin
- result:= RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + Version + '\Installer', 'Path');
- end;
复制代码
如果不想要用户自选的话,只需要取消Tasks段即可
- [Tasks]
- Name: K5; Description: 安装插件到版本5.0; Flags: unchecked ; check: CheckVersion('5.0')
- Name: K6; Description: 安装插件到版本6.0; Flags: unchecked ; check: CheckVersion('6.0')
- Name: K7; Description: 安装插件到版本7.0; Flags: unchecked ; check: CheckVersion('7.0')
- Name: K8; Description: 安装插件到版本8.0; Flags: unchecked ; check: CheckVersion('8.0')
- Name: K9; Description: 安装插件到版本9.0; Flags: unchecked ; check: CheckVersion('9.0')
复制代码
示例代码如下
- [Setup]
- AppName=My Program
- AppVerName=My Program version 1.5
- DefaultDirName={pf}\My Program
- DisableProgramGroupPage=yes
- UninstallDisplayIcon={app}\MyProg.exe
- OutputDir=userdocs:Inno Setup Examples Output
- [Files]
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\5.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('5.0')
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\6.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('6.0')
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\7.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('7.0')
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\8.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('8.0')
- Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\9.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('9.0')
- [code]
- function InitializeSetup (): Boolean;
- var
- i: integer;
- begin
- Result := False;
- for i := 5 to 9 do
- begin
- if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + IntToStr(i) + '.0\Installer','Path') then begin
- Result := True;
- break;
- end;
- end;
- begin
- if Result = False then begin
- MsgBox('检测到没有安装原版,请先安装原版。', mbInformation, MB_OK);
- end;
- end;
- end;
- function CheckVersion(Version: string): Boolean;
- begin
- MsgBox(Version, mbInformation, MB_OK);
- result:= RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + Version + '\Installer', 'Path');
- end;
复制代码
在这里,其实可以定义几个变量,譬如版本号与路径
var usver #先定义一个变量
function k5(): Boolean; #然后用户选择
usver='5.0' 还是 StrCpy usver '5.0' 还是其他写法 #变量赋值
function k6(): Boolean;
usver='6.0'
function k7(): Boolean;
usver='7.0'
function k8(): Boolean;
usver='8.0'
function k9(): Boolean;
usver='9.0'
#再判断用户选定的版本是否存在,变量的引用是否$usver,以及连接符,你去修改。
if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + $usver + '\Installer','Path') then
#下面这一句也可以合并成一句了:
result:= RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + $usver + '\Installer', 'Path');
#最后同样:
[Files]
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\' + $usver + '\Installer,Path}\plug; Flags: ignorever
|