Innosetup 打包安装exe 读取上次安装路径

  关于Innosetup 打包安装时读取上一次安装路径的问题网上也有挺多的文章,基本的思路就是安装时向注册表写安装路径,下次安装时从注册表读取上一次安装路径,方法如下:

[Registry]
Root:HKLM;Subkey:"Software\Myprogrom";Flags:uninsdeletekeyifempty
Root:HKLM;Subkey:"Software\Myprogrom";ValueType:string;ValueName:"InstallPath";ValueData:"{app}";Flags:uninsdeletekey

【code】

function GetDirName(Value: string): string;

var

InstallPath: string;

begin

Result := ExpandConstant('{pf}\Myprogrom');//默认

if RegQueryStringValue(HKLM, 'SOFTWARE\Myprogrom', '', InstallPath) then //注册表如果有 则读取 

Result := InstallPath;

 

end;

但是,有几点需要注意:

1.如果需求是每次安装前先卸载上一个版本的话,上面这个方法是获取不到路径的,因为卸载时注册表的值会被删除。那怎么办呢?思路就是卸载前获取到注册表的路径并记录下来。具体来说就是在【code】中定义一个变量var installPath; 调用卸载前从注册表获取安装路径并赋值给installPath ,然后上面的GetDirName方法直接返回installPath 即可

2.关于注册表的坑

网上说的程序安装后的注册表路径SOFTWARE\Microsoft\Windows\CurrentVersion....  你可能会发现你的程序安装后没有在这个目录下找到,或者你往注册表写安装路径时发现在你要写的注册表目录下没有找到你写的值。这是因为64位系统的原因会从新定位到注册表其它路径下,可以看下这个篇文章:https://www.cnblogs.com/csuftzzk/p/innosetup_read_registry.html  根据我的理解把上面的HKLM改成HKLM64即可。

你可能感兴趣的:(java编程)