製品からセットアップバージョンを検出する方法はありますか?
-
01-10-2019 - |
質問
だから、ここにある状況があります。
セットアップでインストールされている2つのASP.NET Webサイト + Winformアプリケーションがあります。これらはすべて、セットアッププロジェクトへのマージモジュールとして表されます。
現在、アプリケーションのグローバルバージョンを更新する場合は、すべてのバージョンをASP.NET Webサイトなどに更新する必要があります。 ASP.NETアプリケーションのアセンブリ情報にバージョンを検出することが可能であることはわかっていますが、これは非常に簡単です。ここでの難しさは、「グローバル」セットアップバージョンを検出することです。 (ここでウェブサイトはバージョン1.5ですが、グローバルセットアップ自体はバージョン3.4です)。
ある時点で、setup.exe/setup.msiファイルを見つけた場合、反射でそれを閲覧できると思いますが、それは正確に最良の解決策ではありません。サーバーごとの各セットアップを別のフォルダーに保存します(Ex。C: setups product setup.exe、c: setup setaup.exeなど)
助言がありますか ?
解決
「グローバル」セットアップバージョンを定義します。すべてのアセンブリではなく、各パッチが一部を更新するため、1つのアセンブリのバージョン、またはアセンブリのいずれかが最後のパッチをインストールしたパッチを反映していないと言っていますか?
3つのオプション:
- 各構成ファイルにグローバルバージョン情報を保持し、毎回インストールされているすべてのコンポーネントのすべての構成に更新をプッシュアウトします(推奨されません)。
- 共有構成ファイル、または他の構成から参照を「メイン」構成に提供します。これは、実行可能ファイルプロジェクトのいずれかから参照でき、設定が毎回更新されるようにします。
- ソフトウェアパッケージのグローバルバージョンを含むレジストリキーを維持します。
3つのうち、インストールとパッチングはシステムのいくつかの領域に広がっているため、最後を選択しますが、すべての領域がソフトウェアレジストリキーを読み取ることができるはずです(更新しない場合)。プロセスは難しくありません。 static System.win32.registryオブジェクトを参照して、localmachine、currentuserなどのベースキーを取得できます。そこから、レジストリーキーオブジェクトをナビゲートすることでツリーを通過できます(またはキーパスでゼロから作成します)。さまざまなWebおよびapp.configファイルでAppSettingを使用してキーパスを指定できます。これは、キー自体の価値ほど頻繁に変更されるべきではありません。
他のヒント
1つのMSIから複数のパッケージをインストールしている場合は、MSIをARPにリストすることをお勧めします。この「グローバルセットアップ」のバージョンは、将来のMSIですぐに利用できます。セットアップを作成するために使用しているテクノロジーを知らなければ、より強固なアドバイスを提供するのは困難ですが、WIX(Windows Installer XML)では、これを自動的に処理するアップグレード要素を含める必要があります。ほとんどのテクノロジーには、現在のインストールバージョンを確認するための何らかの方法が必要です。