0

古い installshield アプリケーションをリファクタリングしていて、カスタム dll から関数を呼び出すアクションを実行する必要があります。残念ながら、このアクションが実行する機能は、別のカスタム dll に依存しています。したがって、私の質問は次のとおりです。

インストーラーを実行しようとすると、「セットアップが完了する前に中断されました...」というエラーが表示されてクラッシュします。次に、2 番目のカスタム dll を PATH に追加したフォルダーにコピーしたところ、すべてうまくいきました。もちろん、顧客が手作業でそれを行うことは期待できません。

私は Installshield 2008 を使用していますが、私の質問に対する答えはすべてのバージョンで同じになると思います。

編集:おそらく私の質問は十分に明確ではないので、例を挙げます:関数を持つ.dllがあるとしましょう:

UINT __stdcall
PerformAction(MSIHANDLE hInstall)    // IN
{
  ...
  help();
  ...
}

help() は b.dll で定義されています。ここで、新しいアクションを作成するときに、その dll を a.dll に設定し、関数名を PerformAction に設定しますが、これが b.dll に依存していることを示す方法はありません。インストーラーの PATH に含まれるフォルダーに b.dll をコピーすると、正常に動作しますが、そうしないと失敗します。

4

1 に答える 1

1

ここでの最も簡単なInstallShieldアプローチは、バイナリテーブルエントリの代わりに、またはバイナリテーブルエントリに加えてサポートファイルを使用することです。Windowsインストーラーは、カスタムアクション用に単一のDLLのみを抽出しますがSUPPORTDIR、でファイルを参照する場合は、複数のDLLを使用できます。

于 2012-05-11T11:50:21.890 に答える