2012-10-18 11 views
9

को निरस्त नहीं करता है, तो मुझे यह देखने के लिए अपने इंस्टॉलर की आवश्यकता है कि गंतव्य स्थान में कोई फ़ाइल मौजूद है या नहीं, और इंस्टॉलेशन aborts। मेरा प्रोजेक्ट एक अपडेट पैच है, इसलिए मैं इंस्टॉलर को अपडेट फाइलों को इंस्टॉल करने से बचाना चाहता हूं यदि एप्लिकेशन का मुख्य एक्सई गंतव्य में नहीं है। मैं यह कैसे कर सकता हूँ?इनो सेटअप - जांचें कि फ़ाइल में गंतव्य मौजूद है या नहीं, अगर इंस्टॉलेशन

क्या कोई Windows रजिस्ट्री के माध्यम से फ़ाइल संस्करण की जांच करने के लिए कोड का उदाहरण दे सकता है?

[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

आम तौर पर, अद्यतन संस्थापक के लिए, तो आप सिर्फ एक ही AppID उपयोग करें, और Inno आप के लिए बाकी संभाल लेंगे। अधिक जानकारी के लिए [यह आलेख] देखें (http://www.vincenzo.net/isxkb/index.php?title=Upgrades)। – Deanna

उत्तर

10

बस उपयोगकर्ता को सही फ़ोल्डर चुनने तक आगे बढ़ने न दें।

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; 

बेशक, उनके लिए सही फ़ोल्डर को स्वचालित रूप से चुनने का प्रयास करना भी एक अच्छा विचार है, उदाहरण के लिए। रजिस्ट्री से सही स्थान पुनर्प्राप्त करके।

+0

यह मेरे लिए बिल्कुल सही काम करता है ... धन्यवाद! – Dielo

+0

तो फिर आपको [उत्तर को स्वीकार करना चाहिए]] (http://meta.stackexchange.com/a/5235/179541)। वैसे भी, आपने कहा है कि आप अपने प्रश्न में स्थापना को निरस्त करना चाहते हैं। खैर, कभी दिमाग नहीं ... – TLama

+0

यह प्रभावी रूप से एक निरस्त है। एक इंटरैक्टिव इंस्टॉलेशन के लिए यह उपयोगकर्ता को पथ को सही करने या रद्द करने के अलावा अन्य विकल्प नहीं देगा। एक गैर-संवादात्मक (चुप) स्थापना के लिए यह अभी निरस्त हो जाएगा। (हालांकि उस नोट पर, यदि आप चुप इंस्टॉल की उम्मीद कर रहे हैं तो आपको इसके बजाय 'SuppressibleMsgBox' का उपयोग करना चाहिए।) – Miral

3

एक अन्य समाधान InitializeSetup() होगा:

क्रेडिट: 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; 
संबंधित मुद्दे