2013-04-18 16 views
5

Gdy skompiluję skrypt Inno Setup poniżej, spowoduje to błąd (poniżej). Pożyczyłem kod z here, więc nie jestem pewien, dlaczego nie działa poprawnie.Jak uzyskać instalację Inno, aby sprawdzić, czy plik nie istnieje?

Line 136: 
Column 10: 
Invalid prototype for 'FileDoesNotExist' 

Linia 136 jest function FileDoesNotExist(file: string): Boolean;

[Run] 
Filename: "{sys}\regsvr32.exe"; Parameters: "msstdfmt.dll"; WorkingDir: {app}\Pronto\Programs\; BeforeInstall: FileDoesNotExist(ExpandConstant('{sys}\msstdfmt.dll')); StatusMsg: "Registering Controls..." 

[Code] 
function FileDoesNotExist(file: string): Boolean; 
begin 
    if (FileExists(file)) then 
    begin 
     Result := False; 
    end 
    else 
    begin 
     Result := True; 
    end; 
end; 

Odpowiedz

3

Z Inno Setup documentation:

Wszystko BeforeInstall i AfterInstall funkcje nie musi mieć wartość zwracaną.

Innymi słowy, to nie może być function, ponieważ nie może niczego zwrócić; zamiast tego jest to procedure. (Można zobaczyć z przykładów w połączonej strony, że wszystkie one są zadeklarowane jako procedure, a żaden z nich nie zawiera Result w kodzie).

(Pytanie, związana jest też źle, BTW. To pokazuje procedure, który ma typ zwrotu Boolean, co oczywiście nie jest możliwe Podejrzewam, że jeśli zadziałało, to dlatego, że używany parser Pascala nie zauważył wartości zwracanej ze względu na procedure w deklaracji.)

Wygląda na to, że próbujesz zrobić to źle, tak czy inaczej. Jeśli msstdfmt.dll jest dystrybuowany z Twoim setup, powinieneś dodać go do sekcji [Files] z ustawionymi flagami onlyifdoesntexist i regserver. Jeśli jest już zainstalowany w systemie użytkownika, powinien już być zarejestrowany.

[Files] 
Source: "msstdfmt.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist regserver 
+1

W rzeczywistości zazwyczaj nie należy przejmować się, czy istnieje, czy nie. Po prostu użyj wartości domyślnych (tj. Nie "ignoreversion"), które sprawiają, że instaluje plik, jeśli chciałby go zaktualizować i pozostawić w spokoju inaczej. – Miral

Powiązane problemy