バックグラウンド
System Center 2012 を使用して、Windows 8 Enterprise x64 を実行している現場で Windows 8 Metro スタイル アプリケーションを Samsung スレートに展開しています。スレートはドメインに参加し、永続的な DirectAccess 接続をドメインに戻して、System Center がアプリケーションと更新プログラムをデバイスにプッシュできるようにします。
現場で何百ものデバイスにアプリケーションを展開する必要があるため、System Center ルートを選択しました。コード署名証明書は、グループ ポリシーを使用してすべてのデバイスにインストールされます。アプリケーションを展開するには、パッケージ出力を提供し、インストールするデバイスのコレクションを指定するだけです。アプリは数分でデバイスに表示されます。
私たちが抱えている問題は、System Center がアプリケーションを展開するときに、SQLite の依存関係が失われ、データ アクセスがまったく機能しないことです。
私たちのプロジェクトについて
私たちのアプリケーションは、SQLite をバックエンドとして使用する WinJS アプリケーションです。ただし、すべてのデータ アクセス コードは、WinJS プロジェクトが参照する C# WinMD プロジェクトにあります。私たちはsqlite-netライブラリを使用して SQLite と対話しています - そのためのソースを C# プロジェクトに含めました。
Visual Studio では、 Tim Heuer の記事で説明されているように、 SQLite for Windows ランタイム拡張機能をインストールしました。Metro アプリケーションはこれを参照します。
他の展開方法を使用したテスト
アプリケーションからの SQLite データ アクセスは、ローカルでデバッグまたは実行すると、デバッグ/リリースと x86/x64 の両方で正常に機能します。
アプリのパッケージ化プロセスでは、アプリケーションのインストールに使用できる PowerShell スクリプトと、必要に応じて開発者ライセンスが提供されます。PowerShell スクリプトを使用してアプリをインストールすると、SQLite データ アクセスも正常に機能します。アプリのデバッグ/リリース バージョンと x86/x64 バージョンの両方をパッケージ化してインストールすることで、これを確認しました。
トラブルシューティング
アプリケーションが最初に SQLite を使用しようとすると、sqlite3.dll が見つからないという例外が表示されます。
次のことを試して確認しました。
- Release/x64 ビルドをデプロイしていることを確認します
- WinRAR で appx を調べ、sqlite3.dll が含まれていることを確認します。
- WinJS プロジェクトではなく、C# プロジェクトから「SQLite for Windows ランタイム」拡張機能を参照します。
- C++ ランタイムも参照してください。これにより、アプリのデプロイ時に System Center が失敗しました。理由はまだわかりませんが、調べてみてください。
更新 問題は、System Center が、SQLite ライブラリが必要とする Visual C++ ランタイム ライブラリの依存関係の展開に問題があることです。残念ながら、これはもうプログラミングの問題ではありません。私たちはこれについていくつかの助けを得ており、修正を投稿します。