SORU
4 Ocak 2010, PAZARTESİ


Otomatik olarak önceki yüklü sürümü Kaldır Nasıl?İnnoSetup:

İnnoSetup yükleyici oluşturmak için kullanıyorum. Yükleyici otomatik olarak önceki yüklü sürümü, bunun üzerine yerine kaldırmak istiyorum. Bunu nasıl yapabilirim?

CEVAP
20 Ocak 2010, ÇARŞAMBA


Aşağıdaki kullandım. Bunu yapmak için en basit yol ama işe yarıyor emin değilim.

Bu Anti Kur İşleyişi dayanan {#emit SetupSetting("AppId")} kullanır. Eğer kullanmasanız bile, kes-yapıştır doğrudan Uygulama kimliğiniz.

/////////////////////////////////////////////////////////////////////
function GetUninstallString(): String;
var
  sUnInstPath: String;
  sUnInstallString: String;
begin
  sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
  sUnInstallString := '';
  if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
    RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
  Result := sUnInstallString;
end;


/////////////////////////////////////////////////////////////////////
function IsUpgrade(): Boolean;
begin
  Result := (GetUninstallString() <> '');
end;


/////////////////////////////////////////////////////////////////////
function UnInstallOldVersion(): Integer;
var
  sUnInstallString: String;
  iResultCode: Integer;
begin
// Return Values:
// 1 - uninstall string is empty
// 2 - error executing the UnInstallString
// 3 - successfully executed the UnInstallString

  // default return value
  Result := 0;

  // get the uninstall string of the old app
  sUnInstallString := GetUninstallString();
  if sUnInstallString <> '' then begin
    sUnInstallString := RemoveQuotes(sUnInstallString);
    if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
      Result := 3
    else
      Result := 2;
  end else
    Result := 1;
end;

/////////////////////////////////////////////////////////////////////
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep=ssInstall) then
  begin
    if (IsUpgrade()) then
    begin
      UnInstallOldVersion();
    end;
  end;
end;

Alternatifleri

Bir adım daha ileri gider ve sürümü önceden yüklenmiş sürümü sayısını okur da this blog post "Inno Setup Script Sample for Version Comparison" görmek ve geçerli bir yükleme paketi ile numarası bu sürüm karşılaştırır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FullMag

    FullMag

    15 ŞUBAT 2007
  • Garrett Müller

    Garrett Mül

    26 HAZİRAN 2009
  • THELIFEOFPRICE

    THELIFEOFPRI

    16 Mart 2011