ダイナミックファイルリンクを使用したインストーラでアップグレードやパッチを実行すると、アップグレード
やパッチが期待どおりに動作しないことがあります。
ここでは、ダイナミックファイルリンクを使用する際の留意点について紹介します。
対象製品:InstallShield 2009 以降
対象プロジェクト:基本の MSIプロジェクト、InstallScript MSI プロジェクト
[概要]
ダイナミックファイルリンクはインストーラに動的にファイルを追加できる便利な機能ですが、アップデートや
パッチを作成する場合には、ダイナミックファイルリンクの使用に注意が必要です。
ダイナミックファイルリンクを使用した場合、ファイルに対してキーファイルの設定を行うことができません。
Windows Isntaller では、ファイルの更新はキーファイルを元に行われるため、ダイナミックファイルリンクを
使用していることでマイナーアップグレードやパッチで期待どおりにファイルが更新されないなどの問題を
引き起こす可能性があります。
マイナーアップグレードやパッチを作成する可能性がある場合、ダイナミックファイルリンクを使用するに
あたってはアップデートのパッケージだけでなく、旧バージョンのパッケージから以下の内容を厳守する必要が
あります。
1. コンポーネントは、固定のディレクトリへの参照を持つようにする
・ダイナミックファイルリンクには、サブフォルダを含めない
サブフォルダを含めると、内部的にサブフォルダに対して新しいコンポーネントが生成されるため、プロジェクト
で追加したコンポーネントとは異なるコンポーネントにファイルが関連付けられてしまします。
・フォルダごとに、1つのコンポーネントを作成する
サブフォルダがある場合には、各サブフォルダごとに別々のコンポーネントを作成するようにしてください。
・旧バージョンのパッケージとアップグレードのパッケージで、コンポーネントの階層を変更しない
Windows Installer では、マイナーアップグレード(パッチ)で、同じファイルを異なる階層にインストール
することはできません。
2. .exe、.dll、.ocx などバージョンを持つファイルは、コンポーネントにスタティックファイルリンクで
追加する
Windows Installer では、コンポーネントのキーファイルがインストールされないと判断された場合、その
コンポーネント内に含まれるすべてのファイルがインストールされません。
バージョンを持つファイルはスタティックファイルリンクとして追加し、そのコンポーネントのキーファイル
として設定します。
ダイナミックファイルリンクで追加されたファイルは、キーファイルを設定することはできません。
3. アップグレード用のプロジェクトでは、リリースの「パッチの最適化(オプション)」で旧バージョンの
.msi パッケージを指定する
[パッチの最適化]を使用すると、旧バージョンとアップグレードパッケージのファイルキーを同期させる
ことができます。パッチウィザードが .msiパッケージの違いをチェックすることで、より小さいサイズの
適切なパッチを作成することができます。
リリースウィザードの[詳細設定]パネルで、[以前のパッケージ]に旧バージョンの .msiを指定
4. アップグレードプロジェクトの作成時に、ダイナミックファイルリンクされたフォルダからファイルを
削除しない
ダイナミックファイルリンクが参照するソースファイルからファイルを削除した場合、そのファイルは次回の
ビルド時にはリリースに含まれません。また、含まれているファイルの名称として大文字・小文字の状態を変更
してしまうと、( 例:ABC.exe を abc.exe に変更等 ) 変更後のファイルは別のファイルとして扱われてしまう
ため、削除されたのと同様の状態となります。
ファイルがアップグレードまたはパッチのダイナミックファイルリンクから削除されると、アップグレード
やパッチが正しくインストールされない場合があります。
5. ダイナミックファイルリンク時の制限事項を確認する
ダイナミックファイルリンクを使用する場合には、使用できない機能などの制限事項があります。
・ダイナミックファイルリンクに含まれたファイルに対して、カスタム アクションを作成できない
・ダイナミックファイルリンクされたファイルからは、COM 抽出ができない
・「共有」、「パーマネント」、「上書き禁止」、「常に上書き」 といったプロパティを設定できない
・COM Interop の設定を有効にできない
その他にも制限事項がありますので、以下の製品ヘルプにて確認してください。
ヘルプライブラリ:ダイナミック ファイル リンクの制限事項
[参考]
Limitations of Dynamic File Linking