2012-05-11 15 views
0

私は古いinstallshieldアプリケーションをリファクタリングしています。カスタムDLLから関数を呼び出すアクションを実行する必要があります。残念ながら、このアクションが実行する関数は、別のカスタムdllに依存します。だから私の質問は: "カスタムdllを別のカスタムdllに依存させることは可能でしょうか?InstallShieldは別のカスタムDLLのカスタムDLLを使用します

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

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

EDITは: のは、私が機能を持っているA.DLLあるとしましょう::

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

ヘルプ()B.DLLで定義されているのように多分私の質問は、十分な私は例を与える明確ではありません。今私は新しいアクションを作成するときにdllをa.dllに設定し、機能名はPerformActionに設定しますが、b.dllに依存することを示す方法はありません PATHに含まれるフォルダにb.dllをコピーするとインストーラはうまくいきますが、もしそうでなければ失敗します。

答えて

1

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

+0

SUPPORTDIRからファイルを使用するには、どのようにinstall shieldに伝えますか? –

+0

InstallShieldがSUPPORTDIRにファイルを抽出し、そのディレクトリのパスに同じ名前のプロパティ(MsiGetPropertyを使用)を設定します。そこからLoadLibrary()を使用してDLLをメモリにロードすることができます。 –

関連する問題