如果软件已在其它盘安装过,则要求先卸载;如果安装在当前盘,则直接覆盖。通过将每次安装的路径写注册表,卸载时移除注册表。
;reg path
#define REGPATH "Software\MKT\Config"
;installed msg
#define INSTALLED_CH "系统检测到其它盘已安装过,请先卸载,或覆盖,位于:"
#define INSTALLED_EN "Detect you have installed in other disk,please uninstall it first or cover it,disk path:"
[Registry]
Root: HKLM; Subkey: "{#REGPATH}"; ValueType: string; ValueName: path; ValueData: {app}; Flags: createvalueifdoesntexist uninsdeletevalue
[Code]
// 根据选择的语言加载相应的配置文件
function MyLangName(Param : String): String;
begin
Result := ActiveLanguage();
end;
// 是否安装过在其它路径下
function IsAppInstallInOtherDisk() : Boolean;
var
res : Boolean;
installpath : String;
softlan : String;
msg : String;
begin
res := True;
if RegQueryStringValue(HKEY_LOCAL_MACHINE, '{#REGPATH}', 'path', installpath) then
if (Uppercase(installpath) <> Uppercase(ExpandConstant('{app}'))) then // 转换为大写比较
begin
res := False;
softlan := MyLangName('');
if (softlan = 'English') then
msg := '{#INSTALLED_EN}'
else
msg := '{#INSTALLED_CH}';
Msgbox(msg + installpath, mbConfirmation, MB_OK);
end;
Result := res;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
res : Boolean;
begin
res := True;
case CurPageID of wpSelectDir:
res := IsAppInstallInOtherDisk();
end;
Result := res;
end;
另外,对于双引号里面嵌套双引号的问题,使用3个双引号即可,如3个双引号"""aaa"""最后显示为"aaa",而1个双引号"aaa"显示为aaa,2个双引号""aaa""则出错。