InstallShield インストール済みアプリのバージョンをレジストリから取得する方法 [InstallShield]
InstallShieldバージョン: 2010
プロジェクトタイプ: InstallScriptプロジェクト
管理者権限でインストールされたアプリケーションをユーザー権限でアップデートする場合、インストール済みのバージョンが取得できずエラーとなりインストールが続行出来ない、アプリケーション側に権限による問題が無い場合、これを無視してインストールする場合に行う方法。InstallScriptを利用して実現する。
1.インストールデザイナから「動作とロジック」、「InstallScript」を選択する。
2.「ファイル」フォルダ内の「Setup.Rul」を選択するとスクリプトのソースコードが表示される。
3.ソースコード上部にあるタブから「Initialization」と「OnSetupUpdateMode」を選択する。
4.OnSetupUpdateMode”関数内の先頭に以下のコードを追加する。
if ((IFX_INSTALLED_VERSION="") && MAINTENANCE) then
/* レジストリに登録されているバージョン情報を取得します。*/
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
/* “RegDBGetKeyValueEx”関数の第三引(取得するValueのタイプ)は、number型の変数nSrに保存してから、与えないとエラーとなる。RODUCT_GUIはインストールするアプリに割り当てられた固有番号が保存されているInstallShieldのグローバル変数。 */
nSr = REGDB_STRING;
szMyGuidStr
= "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + PRODUCT_GUID;
RegDBGetKeyValueEx( szMyGuidStr, "DisplayVersion", nSr, szVersionString, nSize );
IFX_INSTALLED_VERSION = szVersionString;
endif;
これでインストールの初期化時にインストール済みのバージョンをレジストリから取得し、Installshieldグローバル変数IFX_INSTALLED_VERSION に値を設定すればインストールが続行できる。