2012-10-18 39 views
9

Tôi cần trình cài đặt của mình để kiểm tra xem tệp có tồn tại ở vị trí đích không và nếu không có, sau đó quá trình cài đặt sẽ bị hủy. Dự án của tôi là bản vá cập nhật, vì vậy tôi muốn trình cài đặt tránh cài đặt các tệp cập nhật nếu exe chính của ứng dụng không có trong đích. Tôi có thể làm cái này như thế nào?Cài đặt Inno - Kiểm tra xem tệp có tồn tại ở đích hay không nếu không hủy cài đặt

Ai đó có thể đưa ra ví dụ về mã để kiểm tra phiên bản tệp thông qua đăng ký Windows không?

[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

Thông thường, để cập nhật các trình cài đặt, bạn chỉ cần sử dụng cùng một AppID, và Inno sẽ xử lý phần còn lại cho bạn. Xem [bài viết này] (http://www.vincenzo.net/isxkb/index.php?title=Upgrades) để biết thêm chi tiết. – Deanna

Trả lời

10

Chỉ cần không để người dùng tiếp tục cho đến khi họ chọn đúng thư mục.

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; 

Tất nhiên, bạn cũng nên cố gắng tự động chọn đúng thư mục cho chúng, ví dụ: bằng cách truy xuất vị trí chính xác trong sổ đăng ký.

+0

Cái này hoạt động hoàn hảo cho tôi ... cảm ơn! – Dielo

+0

Vì vậy, sau đó bạn nên ['chấp nhận câu trả lời'] (http://meta.stackexchange.com/a/5235/179541). Dù sao, bạn đã nói rằng bạn muốn hủy bỏ cài đặt trong câu hỏi của bạn. Vâng, đừng bận tâm ... – TLama

+0

Điều này có hiệu quả là hủy bỏ. Đối với một cài đặt tương tác, nó sẽ không cung cấp cho người dùng bất kỳ tùy chọn nào khác ngoài việc sửa đường dẫn hoặc hủy. Đối với một cài đặt không tương tác (im lặng), nó sẽ chỉ hủy bỏ. (Mặc dù trên lưu ý đó, nếu bạn đang mong đợi cài đặt im lặng, bạn nên sử dụng 'SuppressibleMsgBox' thay thế.) – Miral

3

Một giải pháp khác sẽ là InitializeSetup():

Credit: 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; 
Các vấn đề liên quan