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

       今天需要给之前打包的一个软件制作补丁的安装程序,因为当时并没有考虑到这个小软件会做补丁安装程序,所以当时并没有在注册表中记录这个软件的安装位置,不过幸好在环境变量中记录了与这个软件一起使用的数据库的位置(数据库与该软件在同一个目录下),所以将这个环境变量处理一下就可以得到之前软件的安装目录,具体步骤如下:

       1. 首先在INNO Setup[Setup]中添加DisableDirPage=yes,此处设定是不允许用户在安装补丁时擅自修改安装目录。

       2. 将[Setup]DefaultDirName={pf}\{#MyAppName}改为DefaultDirName={code:GetPath},将安装目录由用户指定改为系统自动设定。

       3. 在[Code]中添加代码如下:

//字符串拆分
procedure SeparateTerms(s: string; Separator: char; Terms: TStringList);  
 var  
   hs : string;  
   p : integer;  
 begin 
   Terms.Clear; // First remove all remaining terms  
   if Length(s)=0 then // Nothin'' to separate  
     Exit;  
   p:=Pos(Separator,s);  

   while P<>0 do  
   begin 
     hs:=Copy(s,1,p-1); // Copy term  
     Terms.Add(hs); // Add to list  
     Delete(s,1,p); // Remove term and separator  
     p:=Pos(Separator,s); // Search next separator  
   end;  

   if Length(s)>0 then 
     Terms.Add(s); // Add remaining term  
 end;  

//获取系统安装路径
function GetPath(Param: String): String;
  var
    strPath: String;
    Terms: TStringList;       
     x,i : integer;       
begin
   //取到想要的环境变量值
    RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', strPath); 
   strPath := Trim(strPath);

   //拆分Path
   Terms:=TStringList.Create;   
   SeparateTerms(strPath,';',Terms);
   for i:=0 to Terms.Count-1 do  
     begin
        x := pos('/dbmaster;',Terms.Strings[i]);
        if x>0 then
          begin
             strPath := Terms.Strings[i];
             Delete(strPath,x,10);
          end;
     end;
   Terms.Free;          
   Result := strPath;
end;

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值