有6天没研究pascal代码了,昨天晚上突然来了灵感,终于解决了苦思冥想好几天没能解决的问题,
因此将代码贴出来供大家批评指正,用Inno Setup打包时用得上。
- function InitializeSetup():boolean;
- var
- MykeynotExist:boolean;
- ResultCode: Integer;
- uicmd: String;
- begin
- MykeynotExist:= true;
- if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{49D79F54-D485-4011-83FE-FFC938F3DB86}_is1', 'UninstallString', uicmd) then
- begin
- MyKeynotExist:= false;
- Exec(RemoveQuotes(uicmd), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
- end;
- Result:= MykeynotExist
- end;
原理是探测HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
(也即是反映在“添加/删除程序”中的卸载项目)中的卸载项目,若检测到则启动卸载确认对话框。
在实际应用的时候,各位需要将我代码中“{49D79F54-D485-4011-83FE-FFC938F3DB86}”,
修改成自己脚本中的AppId。