DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

インストーラでファイルを上書きする

注意:セットアッププロジェクトはVisual Studio 2012からサポートされなくなりました。

セットアッププロジェクトによるアップデート」で説明したように、Visual Studioのセットアッププロジェクト(デプロイメントプロジェクト)でアップデートする時は、通常RemovePreviousVersionsプロパティを使って前のバージョンを削除してからインストールするという方法が用いられるため、インストーラによるファイルの上書きに気を使うケースはあまりないでしょう。しかし、Permanentプロパティでアンインストールで削除できないようにしたり、「セットアッププロジェクトによるアップデート」で紹介した再インストールをする場合などには、既に同名のファイルが存在する時に、インストーラがどのような判断でそのファイルを上書きするかしないかを決定しているのか知っておく必要があります。

Windows Installerがどのようなルールでこれを決定しているかについては、「File Versioning Rules」や「Replacing Existing Files」等で説明されています。

このルールをごく簡単に説明すると、次のようになります(簡略化しているため、厳密には正確ではありません)。

まずバージョンのあるファイルの場合は、インストールするファイルのバージョンがより新しければ、上書きします。バージョンのないファイルの場合は、既にあるファイルが更新されていれば、上書きしません。ファイルが更新されたとみなされるのは、ファイルの作成日時が更新日時より古い場合です。

この動作は、REINSTALLMODE Propertyで変更することができます。デフォルトでREINSTALLMODEプロパティは「omus」ですが、この「o」が既にあるファイルのバージョンが古い場合に置き換えることを意味しています。もし同じバージョンでも上書きする場合は「o」の代わりに「e」とします。バージョンが違えば上書きするのであれば、「d」とします。さらに、バージョンやタイムスタンプに関係なく、上書きをしないのならば「p」を、逆に強制的に上書きするのであれば、「a」とします。なおREINSTALLMODEプロパティを変更する方法は、「セットアッププロジェクトによるアップデート」で説明しました。(Windows Installerプロパティを設定する方法の詳細は、こちらをご覧ください。)

また、「Frequently Asked Questions About Windows Installer」の「How do I force-update an unversioned file during an upgrade, even if the user has modified it?」では、ユーザーが更新したバージョンのないファイルを強制上書きする方法が説明されています。ここでは、FileテーブルでVersionを設定することにより、ファイルを上書きする方法が紹介されています。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。