|
正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Share 于 2017-6-16 00:00 编辑
今天需要给之前打包的一个软件制作补丁的安装程序,因为当时并没有考虑到这个小软件会做补丁安装程序,所以当时并没有在注册表中记录这个软件的安装位置,不过幸好在环境变量中记录了与这个软件一起使用的数据库的位置(数据库与该软件在同一个目录下),所以将这个环境变量处理一下就可以得到之前软件的安装目录,具体步骤如下:
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}-- (从注册表读取系统的实际安装路径)就可以了。 |
|