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 を作成します。

clip_image001

 

以下のようなウィザードが表示されますが、今回は特に設定を変更する必要はございません。

 

 

clip_image002

 

次に、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 フォルダーのプロパティに含まれる「一意の識別子」より確認できます。

clip_image004

 

INF ファイルに記述した後は、ビルドを行い、ドライバー パッケージを作成します。ドライバー パッケージをテスト用の環境にコピーし、インストールしましょう。今回、私はテスト用環境として 32 bit 版の Windows 8.1 を使用しています。 

 

clip_image005

 

プリンターは、ローカル プリンター として手動でインストールします。ウィザードにて、 [ディスク使用 ] ボタンよりドライバー パッケージ内の INF ファイルを参照して、インストールを行いましょう。

 

clip_image006

 

ウィザードを完了し、プリンター アイコンが追加されたのを確認しましょう。

 

 

 

② サンプル デバイス アプリのビルドとインストール

今回プリンターに利用する、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 ストアにアップロードするパッケージを作成しますか?" という文言が表示されます。今回はテスト用のデバイスアプリをインストールする予定の為、 [いいえ ] を選択した上で、 [次へ ] をクリックします。次にあらわれる「パッケージの選択と構成」では、特に設定を変える必要はありませんので、そのまま [ 作成 ] ボタンをクリックします。

 

clip_image008

 

clip_image009

 

上記 画像にて記載されている「出力場所」に、アプリ パッケージが保存されますので、それをターゲット PC にコピーしインストールしましょう。

なお、インストールの手順については、以下のサイトをご参照ください。インストールには、管理者権限と、Microsoft アカウントが必要になりますので、予めご注意ください。

 

他のデバイスへのアプリケーションのインストールとテスト

https://msdn.microsoft.com/ja-jp/library/windows/apps/hh975356.aspx

 

ただ、このままの状態で、インストールしたデバイス アプリを起動しても、紐づけられているデバイスがないため、以下の通りアプリ内の [Get Associated Printers] ボタンをクリックしても何も列挙されません。なのでこれから、プリンターとデバイスアプリを連携させる為のデバイス メタデータを作成します。

 

clip_image011

 

③ デバイス メタデータ パッケージの作成とインストール

デバイス メタデータは、作成ウィザードを通して作成されます。ウィザードは、Visual Studio 内より、 [DRIVER] > [Metadata] > [Device Metadata] より起動できます。作成の手順は以下の通りです。

 

1. ウィザードを進める前に、まず、テスト署名を有効化しましょう。ターゲット PC にて、管理者権限でコマンド プロンプトを開き、以下のコマンドを入力します。入力後は再起動を行います。

 

Bcdedit /set testsigning on

 

2. 再起動後、ウィザードを開きます。ウィザード開始画面より、 [New Device Metadata] ボタンをクリックします。

 

clip_image012

 

3. 新しいウィンドウが表示されます。

「Select the metadata package type」では、今回 ストアデバイス アプリを作成した為、 [Windows Store device app metadata] を選択し、 [Next] をクリックします。

 

clip_image013

 

4. 「Select the device categories」で、対象デバイスのカテゴリを選択します。今回はプリンター用のストア アプリなので、"Available Categories" では "Printer" を選択し、それに併せて "Primary category" にて "PrintFax.Printer" を選択した状態で [Next] ボタンをクリックします。

 

clip_image014

 

5. 次に、「Specify the locales」で言語の選択をします。インストール先の環境に合わせて言語を選択してください。私の場合、日本語の OS にインストールしますので、"Available locales" で "日本語 | ja-JP" を選択し、"Default locale" も同じく "日本語 | ja-JP" としました。選択後、 [Next] ボタンをクリックします。

 

clip_image015

 

6. 「Describe the device」で、ユーザーが確認できるデバイス情報を入力します。入力欄がいくつかありますが、ここでは、Model Name と Manufacturer のみ入力必須です。Model Name にはプリンター アイコンの表示名を、Manufacturer には INF ファイル内の記述ManufacturerName="<製造元名>" に含まれる <製造元名> を入力します。

 

clip_image016

 

7. 次に「Specify the hardware information」のセクションで、デバイスのハードウェア ID またはモデル ID の入力を求められます。合計で最低 1 つの ID が必要なので、両方の ID を提供する必要はございません。

今回は、デバイス マネージャーよりプリンターの詳細情報を確認し、そこから確認できたハードウェア ID を 1 つ入力します。ちなみに、ハードウェア ID を入力する際は、冒頭に "DOID:" を含めましょう。

 

clip_image018

 

clip_image019

 

8. [Next] ボタンをクリックすると、デバイスアプリの情報を埋める「Specify
Windows Store device app information」ウィンドウが表示されます。

clip_image020

 

ここで、"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] ボタンをクリックしましょう。

 

clip_image021

 

10. 最後に確認の画面が現れます。今回は Warning がいくつか表示されていますが、特に気にする必要はありません。
"Save Information" カテゴリ内で、Metadata ファイルの保存先を指定しましょう。また、"Copy the device metadata package to the metadata store on the local computer" をチェックすると、 [Save] ボタンをクリックしてウィザードを完了した際に自動的に Metadata ファイルが Metadata ストアにコピーされます。 

clip_image022

 

ちなみに、このウィザードを実行している 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 にコピーした上で、手順を実行することでできます。

 

④ デバイス アプリの動作確認

デバイス メタデータをストアに加えた後、再度「デバイスとプリンター」ウィンドウを確認します。① でインストールしたプリンターをクリックすると、ウィンドウ下部にて表示されるプリンターの詳細情報がメタデータの内容を反映していることを確認できます。以下の画像では、元から表示されていた内容に加え、製造元の情報が新しく表示されています。

clip_image023

 

また、デバイス アプリの [Get Associated Printers] ボタンを押すと、Device Metadata にて参照したデバイスが表示されます。

※この時点で、テスト署名が有効化されていない場合、ボタンを押してもデバイスが表示されないので、テスト署名の有効化は行っておきましょう。 

 

clip_image024

 

まさかたさんのエントリと同様に、印刷に対応しているアプリから、チャーム バーよりデバイス ストア アプリの動作を確認します。

 

clip_image025

 

clip_image026

 

clip_image027

 

clip_image028

 

上の画像にある印刷プレビューの画面にて、 [その他の設定] をクリックすると、以下の通り、②で作成したデバイスアプリが起動され、そのアプリ上で設定を変更することができます。

 

clip_image029

 

clip_image030

 

以上が、デバイス メタデータの使用による、プリンター ドライバーに関連付けられたデバイス ストア アプリの動作確認でございます。

冒頭でも書きましたが、改めて 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

デバイス メタデータの作成について紹介しています。