2012-02-16 25 views
9

私はmsiバージョン番号について本当に混乱しています。 Here PropertyテーブルおよびUpdateテーブルのProductVersionで使用されるバージョン番号は、256以下のメジャーおよびマイナー部分を持つように制限されています。 Here Fileテーブルで使用されているバージョン番号は、65536以下のメジャーおよびマイナー部分を持つことができます。msiバージョン番号

これらのいずれかが間違っていますか?これら2つの「バージョン」は完全に無関係か、それとも何ですか?

また、私は、ファイルテーブルFile Tableの意味で以下の内容を理解していません。

「でバージョン

このフィールドは、バージョン管理されたファイルのバージョン文字列である。このフィールドは、非バージョン管理ファイルの場合は空白です。このフィールドに入力されたファイルのバージョンがファイルのバージョンと同じでなければなりませんが含まインストールパッケージ。

インストールパッケージに含まれているファイルの「」のバージョンがどのように決定されていますか?たとえば、Visual StudioのVS_VERSION_INFOリソースのFILEVERSIONの値ですか?ノートパッドやWordで作成されたファイルの意味は?

「バージョン管理されていない」ファイルとはなんですか? 1つはFILEVERSION = 0.0.0.0のVS_VERSION_INFOリソースですか?または、他の何か?すべての.exeファイルはバージョン管理されていますか?

答えて

20

はい、FileVersionsとProductVersionsは無関係です。 ProductVersionは、プログラムの追加と削除(プログラムと機能)に表示され、主なアップグレードシナリオでは何が起こるべきかを決定するために主に使用されます。

ProductVersionプロパティは[0-255] [0-255]。[0-65535](それぞれ8,8,16符号ビット)として定義されています。 ファイルバージョンは[0-65535] [0 -65535]。[0-65535]。[0-65535](16,16,16,16符号ビット...)

テキスト/ XML/Config/BMP ecteraはnullになります。通常、オーサリングツール(InstallShieldなど)は、ビルド時にバージョン管理されたPEファイル(DLL、OCX、SYS、EXE ...)を反映し、そのバージョン番号を自動的にFileテーブルに作成します。

InstallShieldには、ビルド時にMSIに対して「バージョンが存在する」という「常に上書き」というオプションがあり、PE以外のファイル(TXT/XML ....)に実際にバージョン番号通常は65535.0.0.0)、これはバージョン管理されたファイルがバージョン管理されていないファイルを上書きするかどうかを判断する際のMSIの動作を悪用します。

具体的には、EXEはバージョン管理されていない可能性がありますが、これはアンチパターンです。バージョン管理されていないファイルとは、埋め込みバージョンのリソースレコードを持たないファイルのことです。

デフォルトでは、Windowsインストーラは、srcファイルがターゲットを上書きするかどうかを決定するときに、ターゲットファイルの作成日と変更日を調べます。 CDとMDが同じであれば、「処女」(私の言葉)とみなされ、上書きされます。それらが等しくない場合、それは「ユーザーデータ」とみなされ、常に上書きトリックを行わない限り上書きされません。

これらの評価は、コンポーネントのキーファイル・レベルで行われます。コンポーネント内のその他のコンパニオンファイル(コンポーネントガイドラインに従って1:1ファイルに従わない場合)は、キーファイルの指示に従います。

また、AssemblyVersionとAssemblyFileVersionに違いがあることも認識しています。 。NET AssemblyFileVersion属性は、従来のFileVersion属性にマップされます。 AssemblyVersion属性は、Strong Namingの目的でのみ使用され、MSIはそれを気にしません。

最後に、Googleの詳細については、「Windowsインストーラコンポーネントのルール」を参照してください。

これが意味をなさない場合や、他にご質問がありましたらお知らせください。あなたは実際に1つの質問で約12の質問をしましたので、私は何かが恋しくなるかもしれません。また、この回答を受け入れることを自由に感じてください。

+0

ありがとうございます。ビジュアルスタジオやアドオンに、FILEVERSIONに自動的にバンプする機能はありますか? PRODUCTVERSIONはVS_VERSION_INFOに何らかの意味を持ちますか?バージョン12.2.16と12.02.16は同じですか? –

+2

これは、アプリケーションとアプリケーションインストーラをビルドするビルドオートメーションと継続的インテグレーションを扱うワーム​​の全体的な違いです。そのプロセスでアプリケーションファイルをバージョンアップし、製品バージョンプロパティをインストーラビルドに渡す必要があります。あなたのビルド環境がどのように見えるかによって多くのものがあります。個人的に私は、Team Foundation Serverのチームはあなたが私はとても具体的な答えはありません知っているすべてのInstallShieldまたはワイズまたはVB6、Deplhiは、PowerBuilder、C#、Javaを使用される可能性がありますhttp://tfsversioning.codeplex.com/と一緒にビルドします。 –

+0

MSIEXECは、.exeファイルのバージョンとFile Tableのバージョンが実際に一致するかどうかを実際にチェックしますか? –

関連する問題