none
セットアップでRemovePreviousVersionsをTrueにしてもdllがアップデートされないときの対処方法 RRS feed

  • 質問

  • お世話になります。

    セットアッププロジェクトでインストーラを作成しています。

    通常、アップデート版を作成するときVersionをインクリメントして、RemovePreviousVersionsをTrueにして作成しますが、

    作成後にインストールしても、dllがアップデートされません。

    おそらく、dllのファイルバージョンが変わっていないためと思われるのですが、

    ファイルバージョンが変わっていなくてもアップデートする方法はありますでしょうか?

     

    ブートストラッパに旧バージョンをアンインストールするVBScriptを組み込んでインストール時にアンインストールする方法を試してみたのですが、

    これだとアンインストールしたあとにインストールをキャンセルされると旧バージョンが消されたままになってしまいました。

    2010年10月22日 0:54

回答

  • DLLが更新されたら、必ずファイルバージョンを更新してください。例外はありません。絶対です。

    多くのサンプル(ファイルバージョンに関するもの以外すべてといっていい)で、AssemblyVersion しか定義していませんが、これとは別に AssemblyFileVersion を定義すれば、ファイルバージョンを個別に管理できます(個別に管理したい場合)。

    AssemblyVersion を変えられない理由もわかりませんが、何らかの理由で変更できないのなら、別途ファイルバージョンを管理してください。

    大人の事情で変更できない(DLL-Hellが発生しないように運用でフォローしている)のなら、アンインストールして、インストールするという形で運用でフォローしてください。

    どのインストーラを使うか?にかかわりなくこのあたりは、徹底していないといずれ、会社的に信用を失うことになります。

    バージョン管理とは製品管理の最初の一歩です。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク yty0918 2010年10月26日 9:14
    2010年10月22日 1:47

すべての返信

  • DLLが更新されたら、必ずファイルバージョンを更新してください。例外はありません。絶対です。

    多くのサンプル(ファイルバージョンに関するもの以外すべてといっていい)で、AssemblyVersion しか定義していませんが、これとは別に AssemblyFileVersion を定義すれば、ファイルバージョンを個別に管理できます(個別に管理したい場合)。

    AssemblyVersion を変えられない理由もわかりませんが、何らかの理由で変更できないのなら、別途ファイルバージョンを管理してください。

    大人の事情で変更できない(DLL-Hellが発生しないように運用でフォローしている)のなら、アンインストールして、インストールするという形で運用でフォローしてください。

    どのインストーラを使うか?にかかわりなくこのあたりは、徹底していないといずれ、会社的に信用を失うことになります。

    バージョン管理とは製品管理の最初の一歩です。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    • 回答としてマーク yty0918 2010年10月26日 9:14
    2010年10月22日 1:47
  • とっちゃんさん回答ありがとうございます。

    やはりファイルのバージョンは変えられません。

    製品管理という面で変えないといけないのはよく分かるのですが、変えないという方針ですので。

    調査すると、VersionをインクリメントするときにProductCodeを変更せずに作成すると、

    インストール時に完全にアンインストールしてインストールするということがわかりました。

    これだとdllのファイルバージョンが変わっていなくても全消去のあと新規インストールですので期待通りの結果になりました。

    ただ、インストール時に勝手にアンインストールされてしまうので、ブートストラッパでメッセージぐらいは出そうと思います。

    2010年10月22日 7:11
  • >VersionをインクリメントするときにProductCodeを変更せずに

    えっと、ここでいうバージョンは、インストーラのバージョンですよね?ProductCodeを変えないでビルドすると、既にインストールされていてダメ!っておこられませんか?

    もしかして、ProductCode を変えたら。。。の間違い?

    ま、そこはともかく、できるということであれば、それでごまかしていくしかないでしょう。。。でも、WindowsInstaller(VSセットアップや、InstallShield-LimitedEditionが利用しているインストーラエンジン)は、ファイルバージョンを利用して個々のバージョン管理を行いますので、いずれ対応が難しくなるという可能性があることは覚えておいたほうがよいかと思います。

    参考までに、WindowsInstallerのバージョン管理の解説部分のURLを張っておきます(英語ですが、これ以外に公式あるいはそれに準ずる資料がないので...)。

    File Versioning Rules


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/
    2010年10月22日 7:33
  • インストーラを起動するときに、msiexecのオプションで上書きインストールを指定するのはダメでしょうか?この方法ですと、アセンブリ / ファイルバージョンを変更せずにできます。

    詳しい方法は以下を参考にしてください。

    http://dobon.net/vb/dotnet/deployment/upgrades.html

    2010年10月22日 12:15
  • 既にインストールされていてダメ!っておこられました。

    VSから直接インストールしておこられなかったので勘違いしていました。

    結局、試行錯誤した結果、当初のブートストラッパに旧バージョンをアンインストールするVBScriptを組み込んでインストール時にアンインストールする方法で作成することにしました。

    お騒がせしました。

    2010年10月26日 9:14