13

わかりました。これはInnoSetupで実行できます。

#define AppVer "0.0.11"

次に、次のように使用します

[Setup]
AppVerName={#AppVer}

VERSIONここで、内容が「0.0.11」という名前のファイルがあるとします。

どういうわけか、ファイルの内容をVERSIONInno Setupプリプロセッサ変数に入れる方法はありますか?

4

4 に答える 4

24

ISPPのGetFileVersion機能を使用することをお勧めします(結局、インストーラーのバージョンはアプリケーションのバージョンと一致する必要があるため)。したがって、これが実際にやりたかったことである場合は、jachguateの回答を受け入れる必要があります。

実行可能ファイルからではなくテキストファイルからバージョンを本当に読みたい場合は、次の2つの可能性があります。

1つ目:ファイルの内部形式を変更できる場合は、INIファイルのように見せることで大幅に簡素化できます。

[Version]
Ver=0.0.11

これを前提として、ISPPのReadIni関数を使用してバージョンを取得できます。

#define AppVer ReadIni("ver.ini", "Version", "Ver", "unknown")

2番目の方法は、ファイル形式を変更できない場合、、、およびISPP関数を使用することですFileOpenFileReadFileClose

#define VerFile FileOpen("ver.txt")
#define AppVer FileRead(VerFile)
#expr FileClose(VerFile)
#undef VerFile

ただし、繰り返しますが、代わりに実行可能ファイル自体からアプリのバージョンを取得することをお勧めします。これは、1つには、すべてが一致することを保証するのに役立ちます。

于 2013-01-27T12:38:53.290 に答える
11

Inno Setup Pre Proccessor(ISPP)GetFileVersion関数を使用して、次のように実行可能ファイルから直接バージョンを取得できます。

[Setup]
#define AppVersion GetFileVersion("MyFile.exe")
#define AppName "My App name"

AppName={#AppName}
AppVerName={#AppName} {#AppVersion}
VersionInfoVersion={#AppVersion}

; etc

定義を使用している場合は、すでにISPPを使用しています。

于 2013-01-25T21:59:15.770 に答える
8

インストーラーの実行時にこれを実行したい場合(@jachguateの回答は他の可能性をカバーしており、おそらくあなたが探しているものです-ある時点で他の人を助ける場合に備えてこれを残しておきます)、これを行うには、Pascalスクリプトを使用します。このようなものが機能するはずです:

[Setup]
AppVer={code:MyVersion}

[Files]
// Other files
Source: "YourVersionFile.txt"; DestDir: "{app}"

[Code]
function MyVersion(Param: String): String;
var
  VersionValue: string;
  VersionFile: string;
begin
  // Default to some predefined value.
  Result := '0.0.0';
  VersionFile := '{app}\YourVersionFile.txt';
  if LoadStringFromFile(VersionFile, VersionValue) then
    Result := VersionValue;
end;

サポートされている組み込み関数のリストなど、詳細については、ヘルプファイルのトピック「Pascalスクリプティング」を参照してください。

于 2013-01-25T21:29:44.883 に答える
1

差出人:http ://www.jrsoftware.org/ishelp/

Cのような#includeディレクティブがサポートされています。これは、別のファイルから#includeディレクティブの位置にあるスクリプトに行をプルします。構文は次のとおりです。

#include "filename.txt"

#includeファイル名が完全に修飾されていない場合、コンパイラはディレクティブを含むファイルと同じディレクトリでファイル名を探します。ファイル名の前に。を付けることができますcompiler:。その場合、Compilerディレクトリでファイルを検索します。

于 2013-04-25T22:53:47.963 に答える