(Inno setup打包)检测系统是否已安装程序,若已安装则弹出卸载提示的代码

时间:2024-05-25 21:36:56

原文 http://bbs.itiankong.com/thread-30983-1-5.html

有6天没研究pascal代码了,昨天晚上突然来了灵感,终于解决了苦思冥想好几天没能解决的问题,
因此将代码贴出来供大家批评指正,用Inno Setup打包时用得上。

  1. function InitializeSetup():boolean;
  2. var
  3. MykeynotExist:boolean;
  4. ResultCode: Integer;
  5. uicmd: String;
  6. begin
  7. MykeynotExist:= true;
  8. if RegQueryStringValue(HKEY_LOCAL_MACHINE,
    'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{49D79F54-D485-4011-83FE-FFC938F3DB86}_is1',
    'UninstallString', uicmd) then
  9. begin
  10. MyKeynotExist:= false;
  11. Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  12. end;
  13. Result:= MykeynotExist
  14. end;

复制代码

原理是探测HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
(也即是反映在“添加/删除程序”中的卸载项目)中的卸载项目,若检测到则启动卸载确认对话框。
在实际应用的时候,各位需要将我代码中“{49D79F54-D485-4011-83FE-FFC938F3DB86}”,
修改成自己脚本中的AppId。