杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3123|回复: 0

利用 Inno Setup 制作补丁安装程序

[复制链接]
发表于 2017-6-15 23:59:05 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Share 于 2017-6-16 00:00 编辑

       今天需要给之前打包的一个软件制作补丁的安装程序,因为当时并没有考虑到这个小软件会做补丁安装程序,所以当时并没有在注册表中记录这个软件的安装位置,不过幸好在环境变量中记录了与这个软件一起使用的数据库的位置(数据库与该软件在同一个目录下),所以将这个环境变量处理一下就可以得到之前软件的安装目录,具体步骤如下:
       1. 首先在INNO Setup的[Setup]中添加DisableDirPage=yes,此处设定是不允许用户在安装补丁时擅自修改安装目录。
       2. 将[Setup]中DefaultDirName={pf}\{#MyAppName}改为DefaultDirName={code:GetPath},将安装目录由用户指定改为系统自动设定。
       3. 在code中添加代码如下:

  1. //字符串拆分  
  2. procedure SeparateTerms(s: string; Separator: char; Terms: TStringList);   
  3. var   
  4.    hs : string;   
  5.    p : integer;   
  6. begin   
  7.    Terms.Clear; // First remove all remaining terms   
  8.    if Length(s)=0 then // Nothin'' to separate   
  9.      Exit;   
  10.    p:=Pos(Separator,s);   
  11.   
  12.    while P<>0 do   
  13.    begin   
  14.      hs:=Copy(s,1,p-1); // Copy term   
  15.      Terms.Add(hs); // Add to list   
  16.      Delete(s,1,p); // Remove term and separator   
  17.      p:=Pos(Separator,s); // Search next separator   
  18.    end;   
  19.   
  20.    if Length(s)>0 then   
  21.      Terms.Add(s); // Add remaining term   
  22. end;   
  23.   
  24. //获取系统安装路径  
  25. function GetPath(Param: String): String;  
  26.   var  
  27.     strPath: String;  
  28.     Terms: TStringList;         
  29.      x,i : integer;         
  30. begin  
  31.    //取到想要的环境变量值  
  32.     RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', strPath);   
  33.    strPath := Trim(strPath);  
  34.   
  35.    //拆分Path  
  36.    Terms:=TStringList.Create;     
  37.    SeparateTerms(strPath,';',Terms);  
  38.    for i:=0 to Terms.Count-1 do   
  39.      begin  
  40.         x := pos('/dbmaster;',Terms.Strings[i]);  
  41.         if x>0 then  
  42.           begin  
  43.              strPath := Terms.Strings[i];  
  44.              Delete(strPath,x,10);  
  45.           end;  
  46.      end;  
  47.    Terms.Free;            
  48.    Result := strPath;  
  49. end;  
复制代码


       如果之前有在注册表中记录系统的安装路径,就要简单的多,只需要[Setup]中添加DisableDirPage=yes,并将DefaultDirName={pf}\{#MyAppName}改为DefaultDirName={reg:HKLM/SOFTWARE/LACJXT,InstallLocation}-- (从注册表读取系统的实际安装路径)就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-4-29 06:28 , Processed in 0.112391 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表