1

InstallShield 2010でゼロから作成されたInstallScriptプロジェクトがあります。これには、特に、MSMファイルをラップする3つのネイティブInstallShieldオブジェクトと4つのInstallShieldマージモジュールホルダーオブジェクトが含まれています。

プロジェクトを最初にテストしたときは、クリーンな環境に正常にインストールされましたが、新しいバージョンにアップグレードしようとすると、4つのマージモジュールホルダーオブジェクトのそれぞれで「エラー1706。製品XXXXの有効なソースが見つかりません」というメッセージが表示されました。 。

ネットで調べてみたところ、これはWindowsインストーラーのエラーであり、元のインストールメディアがなくなった後でも、MSIファイルがマシン上に存在している必要があるために発生します。これを確認するための推奨される方法は、[マージモジュールホルダーオブジェクト]プロパティダイアログの[msiパッケージをローカルにキャッシュする]チェックボックスをオンにすることです。

4つのマージモジュールすべてについてそのボックスにチェックマークを付けて再テストしましたが、問題は解決しませんでした。次に、これらのマージモジュールが実際にハードディスクのどこに配置されているかを調べました。プロパティダイアログには、実行時に{ProductGUID}<DISK1TARGET>に解決されると書かれています。テストマシンを見ると、4つのマージモジュールすべてが同じ場所に書き込んでいるように見え、それによって互いのMSIファイルが上書きされていました。C:\Program Files\InstallShield Installation Information\

これを回避するために、各マージモジュールを編集して、一意のパス<DISK1TARGET>\{Name}にキャッシュしました。コンパイルして再度テストしたところ、各マージモジュールが実際に一意のサブフォルダーに保存されていることがわかります。ただし、アップグレードしても、4つのエラー1706メッセージすべてが引き続き表示されます。

誰かアイデアはありますか?明らかな何かが欠けていると確信していますが、それはどこにも文書化されていないようです。:-)

アップデート:

InstallShieldフォーラムの多くの投稿によると、InstallShieldは、InstallScriptプロジェクトをビルドするたびに、埋め込まれたMSIごとに新しい製品GUIDを生成するようです。更新プロセス中に、InstallShieldエンジンはターゲットマシンにキャッシュされた各MSIファイルを新しいバージョンで上書きしますが、それらを実行する場合、Windowsインストーラーは「これは新しい製品です。古い製品のMSIはどこにあるので、それをアンインストールできますか?」、したがってエラー。

ビルドごとに組み込みMSIごとに製品GUIDを再生成しないようにInstallShieldに指示することはできますか?確かに、この動作は、マージモジュールをInstallScriptプロジェクトに埋め込むというアイデア全体を嘲笑しますか?:-(

4

1 に答える 1

0

私はこれを次のように機能させました:

  1. 既に持っている MSM に対応するスタンドアロン MSI セットアップを取得します。幸いなことに、これはそれらすべてに可能でした。
  2. MSI を InstallScript プロジェクトにインストール可能なコンポーネントとして含め、ターゲット上の適切な一時的な場所にインストールします。
  3. 関連するイベントで、MSI ファイル<feature>_Installedにシェル アウトし、スイッチとスイッチを使用して実行します。msiexec.exe/i/qb
  4. 関連するイベントで、スイッチを使用して MSI ファイル<feature>_UnInstallingにシェル アウトし、実行します。msiexec.exe/x

これは少し「間違っている」ように感じますが、非常にうまく機能するので、他に良いアイデアがない限り、このままにしておきます。

于 2010-07-12T09:38:37.153 に答える