2017-08-21 5 views
1

私のアプリケーション用のInno Setupインストーラ/アップデータを作成しています。今、私は、新しいバージョンが利用可能かどうかをチェックする方法を見つける必要があり、もしそれが利用可能であれば、すでにインストールされているバージョンに自動的にインストールされるべきです。バージョン番号を確認するInno Setupのキー値テキストファイルを解析します

特殊なケースは、バージョン番号が他のデータとファイル内にあることです。 Inno Setupのは次のようにルックスを読む必要が ファイル:

#Eclipse Product File 
#Fri Aug 18 08:20:35 CEST 2017 
version=0.21.0 
name=appName 
id=appId 

は、私はすでにそれだけでバージョン番号を持つテキストファイルを読み取るスクリプトを使用してアプリケーションを更新する方法を発見しました。 Inno setup: check for new updates

私の場合は、インストーラには必要ないデータが多く含まれています。ファイルからバージョン番号を解析できるスクリプトを作成するのに助けてくれますか?

私が既に持っているコードは次のようになります。

function GetInstallDir(const FileName, Section: string): string; 
var 
    S: string; 
    DirLine: Integer; 
    LineCount: Integer; 
    SectionLine: Integer;  
    Lines: TArrayOfString; 
begin 
    Result := ''; 
Log('start'); 
    if LoadStringsFromFile(FileName, Lines) then 
    begin 
Log('Loaded file'); 
    LineCount := GetArrayLength(Lines); 
    for SectionLine := 0 to LineCount - 1 do 

Log('File line ' + lines[SectionLine]); 


    if (pos('version=', Lines[SectionLine]) <> 0) then 
       begin 
        Log('version found'); 
        S := RemoveQuotes(Trim(Lines[SectionLine])); 
        StringChangeEx(S, '\\', '\', True); 
        Result := S; 
        Exit; 
       end; 
    end; 
end; 

しかし、スクリプトの実行時にバージョン文字列がライン上にあるかどうかをチェックするためのチェックが動作しません。

+0

それは時々[InnoSetupの –

+0

可能性のある重複したように見えますが、スタックオーバーフローは、無料のコーディングサービスではありません:読み取りによって、変数の宣言方法ファイルから](https://stackoverflow.com/questions/14530504/innosetup-how-to-declare-a-variable-by-reading-from-a-file) – Miral

+0

INIファイルですか?セクションの開始はありますか?それとも、これは本当にファイル全体ですか? –

答えて

1

コードはほぼ正しいです。コードの周りにbeginendがなく、forループで繰り返したいだけです。したがって、Log行だけが繰り返されます。 ifは範囲外のLineCountインデックスに対して実行されます。

あなたがコードより良いをフォーマットする場合には、明らかになった:

function GetInstallDir(const FileName, Section: string): string; 
var 
    S: string; 
    DirLine: Integer; 
    LineCount: Integer; 
    SectionLine: Integer;  
    Lines: TArrayOfString; 
begin 
    Result := ''; 
    Log('start'); 
    if LoadStringsFromFile(FileName, Lines) then 
    begin 
    Log('Loaded file'); 
    LineCount := GetArrayLength(Lines); 
    for SectionLine := 0 to LineCount - 1 do 
    begin { <--- Missing } 
     Log('File line ' + lines[SectionLine]); 

     if (pos('version=', Lines[SectionLine]) <> 0) then 
     begin 
     Log('version found'); 
     S := RemoveQuotes(Trim(Lines[SectionLine])); 
     StringChangeEx(S, '\\', '\', True); 
     Result := S; 
     Exit; 
     end; 
    end; { <--- Missing } 
    end; 
end; 
関連する問題