Microsoft Store と Thumbnail Handler

Microsoft ストアでデスクトップアプリも配布できるようになったおかげで、一部のシェル拡張も配布出来るようになりました。
現時点においては、サムネイルハンドラやプレビューハンドラ、プロパティハンドラが対応しているようです。 Paint.Net もストアでの配布が始まり、そのタイミングで tga と dds ファイルのサムネイルハンドラが機能するようになったみたいです。
サムネイルハンドラと聞いて、これはちょっと調べておかないとと思ったので、記録として残しておきます。

情報について

元は Desktop Bridge: Creators Update のブログで書かれた内容が最初でした。
従来のデスクトップアプリをストアで配布出来るように、 Desktop Bridge の機能が用意されました。ここでファイルの関連付けや各ハンドラのようなレジストリの変更が必要なものも対応出来るように機能拡張されて使えるようになりました。

設定方法

サムネイルハンドラは DLL の形で別に用意があるとして、以下の設定を appxmanifest ファイルに記載するようです。

ただし、これだけを記述してもダメで、付随して他の設定が必要です。

  • アプリの EntryPoint は Windows.FullTrustApplication が設定されていること
  • 該当する CLSID の設定も同ファイルに記述されていること
  • Capability に runFullTrust が設定されていること

実験

試しに手元にあったサムネイルハンドラDLLで実験してみました。
そもそも Desktop Bridge の機能は AppX パッケージに従来のアプリを包むことにあるので、 appxmanifest に適切に設定すれば出来るはず、とやってみました。
使用したのは JavaScript のプロジェクトを作成して出来上がるテンプレートのファイルから、上記の内容に合うように変更していきました。

サムネイルハンドラ用としては、 CLSID で指定する COM サーバーの内容を記載する必要がありました。
com:Extension を用いて、各設定を行っていきます。このヘルプは以下のところにありました。
com:Extension (Windows 10)

ここから SurrogateServer やら ProgId やらを設定して、パッケージがビルドできるように整えていきます。

しかしながらインストールして試してみるとファイルの関連付けは出来ているものの、サムネイルの表示には失敗でした。
パッケージの Identifiy に ProcessorArchitecture=”x64″ を記述してみたり、バージョンの指定を変更してみたり、ちょっといじってみましたがうまくいかずでした。

まとめ

Paint.Net のほうではうまくサムネイルハンドラが機能して、 DDS, TGA ファイルのサムネイルが表示されていました。そのため今回うまくいかなかったのは何かまだ設定の見落としがあると思っています。
サムネイルハンドラをストアで配布するための予備実験でしたが、デスクトップアプリを AppX にパッケージングという点については動作検証が出来ました。普通の .Net アプリを確かにパッケージングして UWPアプリのインストールと変わらない感じで導入できるのは良さそうに思いました。

まだ今回の Desktop Bridge の Thumbnail Handler については情報がほとんどなく苦戦中ですが、また時間を見つけてトライしてみようと思ってます。出来ているよ、という人はアドバイスをもらえたら幸いです。

おまけ

どうやら通常の従来型サムネイルハンドラは、今回のストアで配布されるサムネイルハンドラに優先順で負けるようです。
インストール順で上書きされないようなので、この辺りは注意が必要かもしれません。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする