2013-04-18 37 views
5

當我編譯下面的Inno Setup腳本時,它給我一個錯誤(如下)。我借用了here的代碼,所以我不確定它爲什麼不能正常工作。 136如何獲取Inno Setup以檢查文件是否不存在

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

線是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; 

回答

3

Inno Setup documentation

所有BeforeInstall和AfterInstall功能不能有返回值

換句話說,它不能是function,因爲它不能返回任何東西;相反,這是一個procedure。 (你可以從他們都聲明爲procedure在鏈接頁面的例子看,其中沒有包含在代碼中Result

(你鏈接的問題也是錯誤的,順便說一句,它顯示了一個procedure具有的Boolean返回類型,這當然是不可能的。我懷疑,如果它的工作是因爲帕斯卡解析器使用沒有注意到,因爲在申報procedure的返回值。)

無論如何,它似乎是你試圖做錯了。如果msstdfmt.dllsetup一起發佈,則應將其添加到設置了onlyifdoesntexistregserver標誌的[Files]部分。如果它已經安裝在用戶的系統上,它應該已經被註冊。

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

其實你通常不應該在乎它是否存在。只需使用默認設置(即不是「ignoreversion」),這樣就可以安裝該文件,如果它將升級它,並將其保持獨立。 – Miral

相關問題