16

基本的に私が必要としているのは、WiX の製品バージョン番号 (3.0 with Votive など) を自動的に更新し、そのバージョン番号を Inno Setup の「ブートストラップ」に取得する方法です。

私はプロセスをほとんど自動化していますが、バージョン番号はまだ手動で更新する必要があり、これは明らかに理想的ではありませんが、コンパイル時に Inno Setup に値を渡す方法 (およびそれらを参照する方法) を見つけることができませんでした。 WiX プロジェクトでは、Visual Studio 2008 の同じソリューションで別のプロジェクトのバージョン番号を参照する方法を知る必要があります。

4

5 に答える 5

26

何も渡す必要はありません!InnoSetup プリプロセッサに、バイナリのバージョン リソースから直接バージョン情報を読み取らせるだけです。たとえば、次のようになります。

#define AppName "My App"
#define SrcApp "MyApp.exe"
#define FileVerStr GetFileVersion(SrcApp)
#define StripBuild(str VerStr) Copy(VerStr, 1, RPos(".", VerStr)-1)
#define AppVerStr StripBuild(FileVerStr)

[Setup]
AppName={#AppName}
AppVersion={#AppVerStr}
AppVerName={#AppName} {#AppVerStr}
UninstallDisplayName={#AppName} {#AppVerStr}
VersionInfoVersion={#FileVerStr}
VersionInfoTextVersion={#AppVerStr}
OutputBaseFilename=MyApp-{#FileVerStr}-setup

バージョン 5.4.1 (2011-02-09) より前は、ISPP はデフォルトの InnoSetup パッケージに含まれていませんでした。InnoSetup Quick Start Pack をダウンロードする必要がありました: http://www.jrsoftware.org/isdl.php#qsp (@Gwyn さん、更新ありがとう)

于 2008-12-11T08:58:33.517 に答える
8

パッケージ内のファイル バージョンから WiX の ProductVersion を取得できます。構文は次のようなものです。

<Product Version="$(var.FileVersion.FileId)">

または、次のような構文で「-dVersionFromCommandLine = 1.0.0.0」スイッチを使用して、キャンドルにコマンドラインで提供できます。

<Product Version="$(var.VersionFromCommandLine)">

どちらも WiX v3 の最新ビルドで動作します。後者のみが WiX v2 で動作します。

于 2008-12-11T18:51:11.353 に答える
1

約束どおりのサンプルコード。始めるにはこれで十分です。

次の JavaScript を使用して、バージョン番号を含む InnoSetup iss ファイルを作成できます。実際のファイルは次のようになります。

VersionInfoVersion=1.2.3.12345
AppVerName=My App v1.2.3.12345

[Setup]セクションの末尾に以下を追加することにより、メインの Inno Setup スクリプトにこのファイルが含まれます。

[Setup]
AppId={{...}}
...

#include "version.iss"

JavaScript は次のとおりです (これは別のファイルとして保存されます。たとえば、version.js です)。

createInnoSetupIncludeFile("My App", 1, 2, 3, 12345, "version.iss");

function createInnoSetupIncludeFile(appName, verMajor, verMinor, verSubMinor, buildNumber, headerFileName)
{
    var versionString = verMajor + "." + verMinor + "." + verSubMinor + "." + buildNumber;
    var fileSystemObject = WScript.CreateObject("Scripting.FileSystemObject");
    var fileObject = fileSystemObject.CreateTextFile(headerFileName, true);
    fileObject.WriteLine("VersionInfoVersion=" + versionString);
    fileObject.WriteLine("AppVerName=" + appName + " v" + versionString);
    fileObject.Close();
    fileObject = null;
    fileSystemObject = null;
}

このスクリプトを微調整して、別のフォルダーに version.iss ファイルを作成することができます。

最後に、JavaScript を実行する必要があります。最適な場所は、Visual Studio プロジェクトのビルド前イベントです。以下を追加します。

cscript version.js //NoLogo

Wix 互換のインクルード ファイルもビルドするには、これを変更する必要があります。以前はこれを行っていましたが、Wix を破棄して Inno Setup を使用したため、このコードを手元に持っていません。ただし、Wixスクリプトにはメカニズムがあるため、正しい方向に進む必要があります-概念は同じです-バージョン番号を定義するテキストファイルを生成し、それを含めます.

お役に立てれば。

于 2008-12-11T08:06:17.990 に答える
1

私が行う方法は、バージョン番号の定義を含むヘッダー ファイルを作成する WSF スクリプト (私は JavaScript を使用しますが、Cygwin を使用して VBScript または SH スクリプトを使用することもできます) を使用することです。Wix<include>ステートメントを使用して、バージョン番号をドラッグできます。

Inno Setup の場合、バージョン番号を含む .iss ファイルを作成します。このファイルは、メインの iss スクリプトに #include されています。

私は家にいますが、もしよろしければ明日サンプルコードを投稿できます。

編集:さまざまなVSプロジェクトのビルド前段階で、ビルド番号を含むファイルを生成するスクリプトを実行することを忘れていました。

于 2008-12-10T22:23:15.203 に答える
0

inno setup セクションでこれが機能するように見えます:

http://agiletracksoftware.com/blog.html?id=4

于 2008-12-10T23:03:14.093 に答える