WPConnect

先日紹介したMango以前のカメラ機能を利用するコードだが、実はそのままではデバッグが上手く動かなかった。
具体的には、CameraCaptureTask#showを実行してもカメラアプリが起動しないのだ。

CameraCaptureTask camera = new CameraCaptureTask();
camera.Completed += (sender, args) =>
{
    if (args.ChosenPhoto != null)
    {
        BitmapImage bmp = new BitmapImage();
        bmp.SetSource(args.ChosenPhoto);
        img.Source = bmp;
    }
};
camera.Show(); // カメラアプリが起動するはずだが...

これには理由がある。

カメラの動作テストを実行するためには実機でのテストが必要になる。なのでVisual Studioから実機にアプリケーションをデプロイして、それをデバッグするのだが、実機と接続するにはZuneクライアントを起動しておかなくてはならないのだ。(そもそもこれが気に入らない)

Zuneクライアントは実機を接続したことを検出すると同期モードに入る。そして同期モードに入った実機側は現在同期中であることを示す画面が表示されたままであり、カメラ、メディアを扱うアプリケーションはZuneから切断するまで起動することができないのである。
デプロイ/デバッグするにはZuneクライアントが必要だが、カメラアプリの起動するにはZuneクライアントから切断しなくてはならない。

自己矛盾だ。

これを解決するためにはZuneクライアントに頼らず、同期モードに入らずに実機と開発環境を接続する必要があるのだが、Windows Phone SDKにはこのためのツールがきちんと提供されている(昨日知った)

WPConnect.exe

デフォルトでは以下のパスにインストールされているはずだ。
C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Tools\WPConnect\x86\WPConnect.exe

起動されているZuneを終了させて、このWPConnect.exeを起動することで、Zuneクライアントの代わりに実機が接続されるので、以降Visual Studio 2010を使用してデプロイ、デバッグが可能になるはずだ。