16

バックグラウンド

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++ ランタイム ライブラリの依存関係の展開に問題があることです。残念ながら、これはもうプログラミングの問題ではありません。私たちはこれについていくつかの助けを得ており、修正を投稿します。

4

1 に答える 1

3

私たちが行っている一時的な修正の詳細を投稿したかった. また、問題の根本に近づいたので、その詳細も提供したいと思います。

問題の要約

Metro プロジェクトから Visual C++ ランタイム パッケージを参照すると、System Center はアプリケーションをデバイスに展開できません。これは、適切なアーキテクチャとビルド フレーバーの適切なバージョンの依存関係を展開する際に問題があるためです。

Visual Studio 2012 を実行している (および展開用にプロジェクトをパッケージ化している) 開発マシンは、Windows 8 (50712) の新規インストールで使用できるものよりも新しいバージョンの Visual C++ ランタイム (50727) を使用しています。

System Center チームと協力して、これが使用していたバージョンのバグであり、将来のビルドで既に対処されていることを確認しました。環境のアップグレードに取り組みますが、それには数週間かかります。

回避策

次の回避策を確認してテストしました。

  • Metro プロジェクトから Microsoft Visual C++ ランタイム パッケージへの参照を削除します。
  • Visual Studio 2012 用の Visual C++ 再頒布可能パッケージの x64 バージョンをインストールします - http://www.microsoft.com/en-us/download/details.aspx?id=3
  • アプリケーションをデプロイする

依存関係の正しいバージョンが既に存在するため、魅力的に機能します。x86 と ARM もターゲットにすることを選択した場合、明らかに長期的な解決策ではありませんが、この困難を乗り越えることができます。

于 2012-09-11T01:27:40.877 に答える