none
Windows Installerのカスタム動作の使い方に関して RRS feed

  • 質問

  • お世話になります。

     

    Visual Studio 2005の「セットアッププロジェクト」を使ってインストーラを作成しています。

     

    <要件>

    • インストール・アンインストール時にA.exeを実行します。
    • A.exeはB.dll内の関数を呼びます。
    • A.exe、B.dllはインストール先へ配置しません。
    • A.exeはMFCアプリケーションプロジェクト、B.dllはMFC DLLプロジェクトで作成しています。

    このとき、A.exe及びB.dllをどのように設定すればよろしいでしょうか?

     

    • アプリケーションフォルダにA.exe、B.dllを追加し、共に「Exclude」プロパティを「True」に
    • カスタム動作の「確定」及び「アンインストール」にA.exeを追加

    としてみたところ、できあがったインストーラを実行するとカスタム動作の実行フェイズで
    「このWindowsインストーラパッケージには問題があります。」
    とメッセージが出てインストール処理がロールバックされます。
    B.dllがA.exeの実行時に存在していないようでした。
    インストーラからではなく直接A.exeを実行した場合には何も問題はありません。
    インストーラからでもB.dll内の関数を呼ばなければ問題ありません。


    インストールログ(抜粋):

    エラー 1722。  この Windows インストーラ パッケージには問題があります。セットアップの一部として実行されるプログラムは正しく完了しませんでした。サポート担当者またはパッケージのベンダに問い合わせてください。 操作 _F42839C0_D41C_476B_94DD_EC94B17FD1F5, 場所: C:\WINDOWS\Installer\MSIC2.tmp, コマンド: /install
    MSI (s) (EC:40) [10:34:34:956]: 製品: TestApp -- エラー 1722。  この Windows インストーラ パッケージには問題があります。セットアップの一部として実行されるプログラムは正しく完了しませんでした。サポート担当者またはパッケージのベンダに問い合わせてください。 操作 _F42839C0_D41C_476B_94DD_EC94B17FD1F5, 場所: C:\WINDOWS\Installer\MSIC2.tmp, コマンド: /install

    2007年6月1日 4:46

回答

  • A.EXE が、それ一つで動かせるようになっていないと、カスタム動作でEXEを呼び出すことはできません。

    これは、インストールしない場合の動作が、そのファイルだけを一時的にテンポラリフォルダに展開してEXEを実行するというために生じる制限事項となります。

    なので、A.EXE に B.DLL のなかみをくっつけて作り直すか、素直にインストールして呼び出すようにするかのどちらかとなります。

    もちろん、MFC をDLLでつないでいるという場合は、それもインストールしなければなりません。

    スタティックリンクであれば、MFC は必要ありませんが。

     

    2007年6月1日 10:48

すべての返信

  • A.EXE が、それ一つで動かせるようになっていないと、カスタム動作でEXEを呼び出すことはできません。

    これは、インストールしない場合の動作が、そのファイルだけを一時的にテンポラリフォルダに展開してEXEを実行するというために生じる制限事項となります。

    なので、A.EXE に B.DLL のなかみをくっつけて作り直すか、素直にインストールして呼び出すようにするかのどちらかとなります。

    もちろん、MFC をDLLでつないでいるという場合は、それもインストールしなければなりません。

    スタティックリンクであれば、MFC は必要ありませんが。

     

    2007年6月1日 10:48
  • ご回答ありがとうございます。

     

    あくまでVisual Studioではできないだけで、Orcaとか使えばできるのかなと思ったのですが、無理なのですね。

     

    どうもありがとうございました。

     

    2007年6月4日 1:00