Windows 8.1 のプリンター用デバイス アプリについて
こんにちは。JS です。
以前、まさかたさんが「プリンター用デバイスアプリのサンプルを動かしてみる」で Windows 8 におけるプリンター用のデバイスアプリについて紹介しておりました。Windows 8.1 になって、サンプルの動かし方が少々変わりましたので、改めてご紹介したいと思います。
手順は、前回と同じく、以下の 4 つに分けられています。
① ダミーの V4 Printer Driver の作成とインストール
② サンプル デバイス アプリのビルドとインストール
③ デバイス メタデータ パッケージの作成とインストール
④ デバイス アプリの動作確認
①v4 Printer Driver 作成とインストール
まず、Visual Studio 2013 のプロジェクトテンプレートのウィザードを使って、ダミー用の v4 Printer Driver を作成します。基本的な v4 Printer Driver の基本的な作成方法は、以下の MSDN ドキュメントでも公開されておりますが、本記事で改めてご案内したいと思います。
Building a Basic v4 Printer Driver
https://msdn.microsoft.com/en-us/library/windows/hardware/dn641620(v=vs.85).aspx
初めに Visual Studio 2013 を起動します。
[ ファイル] > [新規] > [プロジェクト ] より表示される以下の画像のようなウィンドウで、Printer Driver を作成します。
以下のようなウィザードが表示されますが、今回は特に設定を変更する必要はございません。
次に、INF ファイルの記述を編集します。
赤字の部分が、記述を追加した個所になります。
[Version] Signature="$Windows NT$" Class=Printer ClassGuid={4D36E979-E325-11CE-BFC1-08002BE10318} Provider=%ManufacturerName% CatalogFile=v4PrinterDriver.cat ClassVer=4.0 DriverVer=07/01/2015,1.0.0.0
[DestinationDirs] DefaultDestDir = 66000
[SourceDisksNames] 1 = %DiskName%,,,""
[SourceDisksFiles] V4PrinterDriver.gpd=1 V4PrinterDriver-manifest.ini=1 V4PrinterDriverRenderFilter-PipelineConfig.xml=1 V4PrinterDriverRenderFilter.dll=1
[Manufacturer] %ManufacturerName%=Standard,NT$ARCH$
[Standard.NT$ARCH$] “ModelName”=DriverInstall, USBPRINT\MyModel “ModelName”=DriverInstall, WSDPRINT\MyModel “ModelName”=DriverInstall, {8E41214B-6785-4CFE-B992-037D68949A14}
[DriverInstall] CopyFiles=DriverFiles
[DriverFiles] V4PrinterDriver.gpd V4PrinterDriver-manifest.ini V4PrinterDriverRenderFilter-PipelineConfig.xml V4PrinterDriverRenderFilter.dll
[Strings] ManufacturerName="CompanyName" DiskName="v4PrinterDriver Installation Disk" |
ちなみに、緑字で記載されている GUID の部分は、Driver Files フォルダーのプロパティに含まれる「一意の識別子」より確認できます。
INF ファイルに記述した後は、ビルドを行い、ドライバー パッケージを作成します。ドライバー パッケージをテスト用の環境にコピーし、インストールしましょう。今回、私はテスト用環境として 32 bit 版の Windows 8.1 を使用しています。
プリンターは、ローカル プリンター として手動でインストールします。ウィザードにて、 [ディスク使用 ] ボタンよりドライバー パッケージ内の INF ファイルを参照して、インストールを行いましょう。
ウィザードを完了し、プリンター アイコンが追加されたのを確認しましょう。
② サンプル デバイス アプリのビルドとインストール
今回プリンターに利用する、Windows 8.1 用のデバイスアプリのサンプルが MSDN にて提供されているので、ダウンロードしましょう。
Print settings and print notifications
https://code.msdn.microsoft.com/windowsapps/Device-app-for-printers-91f363a9
ダウンロード ファイルに、Visual Studio 2013 用ソリューションファイルがありますので、それを使用して Visual Studio で開き、ビルドを行います。サンプル デバイスアプリも、今回は①の v4 Printer Driver と同じく、特に手を加えないままビルドします。
デバイス アプリのインストールについては、冒頭にて紹介したまさかたさんのエントリにもある通り、以下 2 つの方法があります。
1. アプリ パッケージを作成してインストール
2. VS2013 の機能を使ってリモートコンピュータに自動的に配置
今回はアプリケーション パッケージを使用した 1 のインストール方法を利用します。ソリューションエクスプローラーより「DeviceAppForPrinters (Windows 8.1)」パッケージを選択し、 [プロジェクト] > [ストア] > [アプリ パッケージの作成 ] を順にクリックします。
すると、ウィンドウが表示され、"Windows ストアにアップロードするパッケージを作成しますか?" という文言が表示されます。今回はテスト用のデバイスアプリをインストールする予定の為、 [いいえ ] を選択した上で、 [次へ ] をクリックします。次にあらわれる「パッケージの選択と構成」では、特に設定を変える必要はありませんので、そのまま [ 作成 ] ボタンをクリックします。
上記 画像にて記載されている「出力場所」に、アプリ パッケージが保存されますので、それをターゲット PC にコピーしインストールしましょう。
なお、インストールの手順については、以下のサイトをご参照ください。インストールには、管理者権限と、Microsoft アカウントが必要になりますので、予めご注意ください。
他のデバイスへのアプリケーションのインストールとテスト
https://msdn.microsoft.com/ja-jp/library/windows/apps/hh975356.aspx
ただ、このままの状態で、インストールしたデバイス アプリを起動しても、紐づけられているデバイスがないため、以下の通りアプリ内の [Get Associated Printers] ボタンをクリックしても何も列挙されません。なのでこれから、プリンターとデバイスアプリを連携させる為のデバイス メタデータを作成します。
③ デバイス メタデータ パッケージの作成とインストール
デバイス メタデータは、作成ウィザードを通して作成されます。ウィザードは、Visual Studio 内より、 [DRIVER] > [Metadata] > [Device Metadata] より起動できます。作成の手順は以下の通りです。
1. ウィザードを進める前に、まず、テスト署名を有効化しましょう。ターゲット PC にて、管理者権限でコマンド プロンプトを開き、以下のコマンドを入力します。入力後は再起動を行います。
Bcdedit /set testsigning on
2. 再起動後、ウィザードを開きます。ウィザード開始画面より、 [New Device Metadata] ボタンをクリックします。
3. 新しいウィンドウが表示されます。
「Select the metadata package type」では、今回 ストアデバイス アプリを作成した為、 [Windows Store device app metadata] を選択し、 [Next] をクリックします。
4. 「Select the device categories」で、対象デバイスのカテゴリを選択します。今回はプリンター用のストア アプリなので、"Available Categories" では "Printer" を選択し、それに併せて "Primary category" にて "PrintFax.Printer" を選択した状態で [Next] ボタンをクリックします。
5. 次に、「Specify the locales」で言語の選択をします。インストール先の環境に合わせて言語を選択してください。私の場合、日本語の OS にインストールしますので、"Available locales" で "日本語 | ja-JP" を選択し、"Default locale" も同じく "日本語 | ja-JP" としました。選択後、 [Next] ボタンをクリックします。
6. 「Describe the device」で、ユーザーが確認できるデバイス情報を入力します。入力欄がいくつかありますが、ここでは、Model Name と Manufacturer のみ入力必須です。Model Name にはプリンター アイコンの表示名を、Manufacturer には INF ファイル内の記述ManufacturerName="<製造元名>" に含まれる <製造元名> を入力します。
7. 次に「Specify the hardware information」のセクションで、デバイスのハードウェア ID またはモデル ID の入力を求められます。合計で最低 1 つの ID が必要なので、両方の ID を提供する必要はございません。
今回は、デバイス マネージャーよりプリンターの詳細情報を確認し、そこから確認できたハードウェア ID を 1 つ入力します。ちなみに、ハードウェア ID を入力する際は、冒頭に "DOID:" を含めましょう。
8. [Next] ボタンをクリックすると、デバイスアプリの情報を埋める「Specify
Windows Store device app information」ウィンドウが表示されます。
ここで、"Windows Store device app" カテゴリにある [Import Windows Store App manifest file] ボタンに注目してください。Windows 8 のウィザードでは、カテゴリ内の情報を手動で入力する必要がありましたが、Windows 8.1 では、App manifest file を参照することで自動的に情報が記入されます。
②でダウンロード・ビルドしたデバイス アプリのフォルダー内に、Package.appxmanifest という名前のファイルがありますので、そちらを参照しましょう。私の場合は、C++ のサンプルをダウンロードしたので、<ルート>\C++\DeviceAppForPrinters フォルダ内にファイルがありました。
参照すると、以下 画像の通り、Package.appxmanifest ファイル内の情報を基に、空欄が埋められていきます。
App manifest file 内の情報以外は、今回は特に他に入力する情報はありませんので、このまま [Next] ボタンをクリックします。
9. 次の「Specify the Windows settings」は特に変更する必要はありません。 [Next] ボタンをクリックしましょう。
10. 最後に確認の画面が現れます。今回は Warning がいくつか表示されていますが、特に気にする必要はありません。
"Save Information" カテゴリ内で、Metadata ファイルの保存先を指定しましょう。また、"Copy the device metadata package to the metadata store on the local computer" をチェックすると、 [Save] ボタンをクリックしてウィザードを完了した際に自動的に Metadata ファイルが Metadata ストアにコピーされます。
ちなみに、このウィザードを実行している PC がターゲット PC ではない場合、Metadata ファイルを自動的にターゲット PC へのストアにコピーできません。その場合は、ターゲット PC 内の以下のパスに devicemetadata-ms ファイルを直接コピーしましょう。
C:\ProgramData\Microsoft\Windows\DeviceMetadataStore\<ロケール>
私の場合、ja-JP ロケールのファイルを作成しましたので、C:\ProgramData\Microsoft\Windows\DeviceMetadataStore\ja-JP フォルダ内にコピーしました。
(ロケール用のフォルダーがない場合は新たに作成しましょう)
デバイス メタデータ パッケージの詳細については、以下のサイトからダウンロードできるドキュメントにて記載されておりますので、ご参照いただけたらと思います。
Device Metadata Package Pipeline
<https://www.microsoft.com/en-us/download/details.aspx?id=30727>
また、上記で使用したウィザードは、スタンドアロンでも起動することができます。以下のパスに同梱されております:
C:\Program Files (x86)\Windows Kits\8.1\bin\<アーキテクチャ>\DeviceMetadataWizard.exe
(EXE の実行には、同じフォルダ内にある devicemetadatacommon.dll ファイルが必要です)
もしデバイス メタデータを自動的にターゲット PC のストアにコピーしたい場合は、上記の EXE/DLL ファイルと、手順 7 で紹介した appxmanifest ファイルをターゲット PC にコピーした上で、手順を実行することでできます。
④ デバイス アプリの動作確認
デバイス メタデータをストアに加えた後、再度「デバイスとプリンター」ウィンドウを確認します。① でインストールしたプリンターをクリックすると、ウィンドウ下部にて表示されるプリンターの詳細情報がメタデータの内容を反映していることを確認できます。以下の画像では、元から表示されていた内容に加え、製造元の情報が新しく表示されています。
また、デバイス アプリの [Get Associated Printers] ボタンを押すと、Device Metadata にて参照したデバイスが表示されます。
※この時点で、テスト署名が有効化されていない場合、ボタンを押してもデバイスが表示されないので、テスト署名の有効化は行っておきましょう。
まさかたさんのエントリと同様に、印刷に対応しているアプリから、チャーム バーよりデバイス ストア アプリの動作を確認します。
上の画像にある印刷プレビューの画面にて、 [その他の設定] をクリックすると、以下の通り、②で作成したデバイスアプリが起動され、そのアプリ上で設定を変更することができます。
以上が、デバイス メタデータの使用による、プリンター ドライバーに関連付けられたデバイス ストア アプリの動作確認でございます。
冒頭でも書きましたが、改めて Windows 8 での動作確認手順と比較すると、ところどころ変更点がありますので、Windows 8.1 で新しくデバイス アプリを開発される方々のご参考になればと思います。
[参考]
How to display printer status in a Windows Store device app
https://msdn.microsoft.com/en-us/library/windows/hardware/dn391714(v=vs.85).aspx
C# 版のデバイス ストア アプリ サンプルを使用したテストの手順が紹介されています。
手順 2: Windows ストア デバイス アプリのデバイスメタデータを作成する (Windows 8.1)
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn265143(v=vs.85).aspx
デバイス メタデータの作成について紹介しています。