Windows 7、.net4、および最新の WiX 3.7 の Votive アドインを使用して、Visual Studio 2010 を使用して msi を作成しています。
インストールは非常に複雑ですが、PC でテストすると問題なく動作します。
インストール中に、いくつかのカスタム アクションを実行します。これらのカスタム アクションの 1 つは、カスタム アクションでのみ必要なデータベース アクセス用の外部 SQLite dll を必要とします。
開発環境を持たないPCで実行すると、単純なWindows 7だけで、ファイルが見つからないというエラーが発生します。これは、この PC に SQLite がインストールされていないためです。
私が得るエラーは次のとおりです。
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'System.Data.SQLite.dll' またはその依存関係の 1 つを読み込めませんでした。指定されたモジュールが見つかりませんでした。
詳細ログから、カスタム アクションがローカルの一時ファイルに抽出されて実行されていることがわかります。これはログ ファイルからの抜粋です。
(SERVER) MSI (s) (74:C0) [09:08:07:527]: Executing op: ActionStart(Name=InitializeDbDeferred,,)
(UNKNOWN) Action 09:08:07: InitializeDbDeferred.
(SERVER) MSI (s) (74:C0) [09:08:07:528]: Executing op: CustomActionSchedule(Action=InitializeDbDeferred,ActionType=1025,Source=BinaryData,Target=InsertDefaultRepositoryDeferred,CustomActionData=DATA=C:\AXS Standalone NVR;REPOSITORYPATH=C:\AXS Repository - (Available Space: 364 (Gb));QUOTA=25)
(SERVER) MSI (s) (74:88) [09:08:07:530]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI4252.tmp, Entrypoint: InsertDefaultRepositoryDeferred
(UNKNOWN) SFXCA: Extracting custom action to temporary directory: C:\Users\Admin\AppData\Local\Temp\MSI4252.tmp-\
(UNKNOWN) SFXCA: Binding to CLR version v4.0.30319
(UNKNOWN) Calling custom action CustomAction!CustomAction.CustomAction.InsertDefaultRepositoryDeferred
(UNKNOWN) Exception thrown by custom action:
(UNKNOWN) System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies. The specified module could not be found.
(UNKNOWN) at CustomAction.CustomAction.InsertDefaultRepositoryDeferred(Session session)
(UNKNOWN) --- End of inner exception stack trace ---
私の質問は、CA が一時的な場所から実行されているときに、インストール中に SQLite dll を「参照」するカスタム アクションを取得するにはどうすればよいですか? どうにかして、CA とその dll をパッケージ化する必要がありますか。
インストーラーに SQLite dll をファイルとして含めようとしましたが、一時的な場所にある CA はその場所を「認識」しませんでした。
CAにSQLite dllを見つける方法がわかりません。