2012-10-18 13 views
9

Yükleyicimin, hedef konumda bir dosya olup olmadığını ve orada bulunmadığını kontrol etmek için yüklemem gerekir. Projem bir güncelleme yamasıdır, bu yüzden yükleyicinin, uygulamanın ana exe'sinin hedefte olmaması durumunda güncelleme dosyalarını yüklemekten kaçınmasını istiyorum. Bunu nasıl yapabilirim?Inno Kurulumu - Dosyanın hedefte mevcut olup olmadığını kontrol edin veya kurulumu iptal etmiyorsa

Birisi, Windows kayıt defteri aracılığıyla dosya sürümünü kontrol etmek için bir kod örneği verebilir mi?

[Files] 
Source C:\filename.exe; DestDir {app}; Flags: ignoreversion; BeforeInstall: CheckForFile; 

[code] 

procedure CheckForFile(): Boolean; 
begin 
    if (FileExists('c:\somefile.exe')) then 
    begin 
    MsgBox('File exists, install continues', mbInformation, MB_OK); 
    Result := True; 
    end 
    else 
    begin 
    MsgBox('File does not exist, install stops', mbCriticalError, MB_OK); 
    Result := False; 
    end; 
end; 
+1

Normalde güncelleme montajcılar için, sadece aynı AppID'si kullanın ve Inno sizin için geri kalan idare edecektir. Daha fazla ayrıntı için [bu makaleye] bakın (http://www.vincenzo.net/isxkb/index.php?title=Upgrades). – Deanna

cevap

10

Sadece kullanıcının doğru klasörü seçene kadar devam etmesine izin vermeyin.

function NextButtonClick(PageId: Integer): Boolean; 
begin 
    Result := True; 
    if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\yourapp.exe')) then begin 
     MsgBox('YourApp does not seem to be installed in that folder. Please select the correct folder.', mbError, MB_OK); 
     Result := False; 
     exit; 
    end; 
end; 

Elbette, bunlar için otomatik olarak doğru klasörü seçmeyi denemek iyi bir fikirdir. Kayıt defterinin doğru yerini alarak.

+0

Bu benim için mükemmel çalışıyor ... teşekkürler! – Dielo

+0

Öyleyse, ['cevabı kabul et ']' i seçmelisiniz (http://meta.stackexchange.com/a/5235/179541). Her neyse, sorunun içindeki yüklemeyi iptal etmek istediğini söyledin. Şey, boşver ... – TLama

+0

Bu etkili bir iptal olduğunu. Etkileşimli bir kurulum için kullanıcıya yolu düzeltmek veya iptal etmek dışında herhangi bir seçenek sunmaz. Etkileşimli olmayan (sessiz) bir kurulum için sadece iptal olacaktır. (Bu notta olsa da, sessiz yüklemeler bekliyorsanız, bunun yerine 'SuppressibleMsgBox' kullanmalısınız.) – Miral

3

Başka bir çözüm InitializeSetup() olacaktır:

Kredi: Manfred

[code] 
    function InitializeSetup(): Boolean; 
    begin 
    if (FileExists(ExpandConstant('{pf}\{#MyAppName}\somefile.exe'))) then 
    begin 
     MsgBox('Installation validated', mbInformation, MB_OK); 
     Result := True; 
    end 
    else 
    begin 
     MsgBox('Abort installation', mbCriticalError, MB_OK); 
     Result := False; 
    end; 
    end; 
İlgili konular