uninstallPrev.iss 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. [Code]
  2. { ///////////////////////////////////////////////////////////////////// }
  3. function GetUninstallString(): String;
  4. var
  5. sUnInstPath: String;
  6. sUnInstallString: String;
  7. begin
  8. sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
  9. sUnInstallString := '';
  10. if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
  11. RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
  12. Result := sUnInstallString;
  13. end;
  14. { ///////////////////////////////////////////////////////////////////// }
  15. function IsUpgrade(): Boolean;
  16. begin
  17. Result := (GetUninstallString() <> '');
  18. end;
  19. { ///////////////////////////////////////////////////////////////////// }
  20. function UnInstallOldVersion(): Integer;
  21. var
  22. sUnInstallString: String;
  23. iResultCode: Integer;
  24. begin
  25. { Return Values: }
  26. { 1 - uninstall string is empty }
  27. { 2 - error executing the UnInstallString }
  28. { 3 - successfully executed the UnInstallString }
  29. { default return value }
  30. Result := 0;
  31. { get the uninstall string of the old app }
  32. sUnInstallString := GetUninstallString();
  33. if sUnInstallString <> '' then begin
  34. sUnInstallString := RemoveQuotes(sUnInstallString);
  35. if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
  36. Result := 3
  37. else
  38. Result := 2;
  39. end else
  40. Result := 1;
  41. end;
  42. { ///////////////////////////////////////////////////////////////////// }
  43. procedure CurStepChanged(CurStep: TSetupStep);
  44. begin
  45. if (CurStep=ssInstall) then
  46. begin
  47. if (IsUpgrade()) then
  48. begin
  49. UnInstallOldVersion();
  50. end;
  51. end;
  52. end;