Windows 8.1の新機能、キオスクモードでアプリを動かすには?[Windows 8.1ストアアプリ開発]:WinRT/Metro TIPS
アンケートの回答入力だけが行えるようにWindows 8.1端末を設定したいことはないだろうか? Win 8.1の新機能「キオスクモード」の使用方法と注意点を説明する。
powered by Insider.NET
Windowsストアアプリを利用してもらいたいのだが、それ以外のことはしてほしくない、という場面はないだろうか? 例えば、店頭に置いて来店客に操作してもらう、あるいは、アンケートの調査員に渡して入力してもらう、などといった用途だ。Windows 8.1(以降、Win 8.1)の新機能「キオスクモード」を使うと、特定のWindowsストアアプリだけを実行する専用端末にできる。本稿では、キオスクモードで利用するアプリを開発する際の注意点を解説する。
事前準備
Win 8.1用のWindowsストアアプリ(以降、Win 8.1アプリ)を開発するには、Win 8.1とVisual Studio 2013(以降、VS 2013)が必要である。本稿ではOracle VM VirtualBox上で64bit版Windows 8.1 Pro(日本語版)とVisual Studio Express 2013 for Windows(日本語版)*1を使用して動作を確認している。
*1 マイクロソフト公式ダウンロードセンターの「Microsoft Visual Studio Express 2013 for Windows」から無償で入手できる。
キオスクモードとは?
正式には「assigned access」と呼ばれる。日本語版Win 8.1上での表記は「割り当てられたアクセス」だ*2。正式名称では分かりづらいので、本稿では「キオスクモード」と呼ぶ。
キオスクモードとは、Win 8.1のユーザーアカウントに1つのWindowsストアアプリを割り当てるものだ。そのユーザーアカウントでサインインすると、直ちに割り当てられたWindowsストアアプリが実行される。それ以外のことは全て制限され、スタート画面に戻ることも他のアプリを起動することもできないし、シャットダウンやサインアウトもできない。メンテナンスのためには、Windowsキーを5回連続して押してユーザーの切り替え画面を出す*3。
*2 マイクロソフトの日本語ページでは、「アクセス割り当て」と訳されている。マイクロソフトのサイトに掲載されている資料の中には「アサインドアクセス」としているものもある。
*3 ユーザーの切り替え画面=通常使用時に[Ctrl]+[Alt]+[Del]を押して「ユーザーの切り替え」を選んだときの画面。起動時に自動サインインする設定にしていても、このようにしてユーザーを切り替えられるのでメンテナンスが可能だ。上記(=*2)の日本語ページには「これにより、PCが再起動します」という記述があるが、誤りである。また、ユーザーの切り替え画面を出した時点では、キオスクモードのユーザーアカウントはサインアウトしていない。必要なら、管理者権限のユーザーアカウントでサインインして、タスクマネージャーを使って強制的にサインアウトさせる。
キオスクモードを設定するには?
詳しくは、「Windows 8.1クロスロード:第8回 単一アプリの実行だけを許可するキオスクモード」をご覧いただきたい。おおまかな流れは、次のようになる。
- キオスクモード用のユーザーアカウントを用意する
- キオスクモード用のユーザーアカウントでサインインしてアプリを準備する
- キオスクモードのユーザーとアプリを選択する
- (必要なら)自動サインインを設定する
- システムを再起動し、設定したユーザーでサインインする
キオスクモード用のアカウントを作成する
ここでは、開発者向けにいくつか補足しておこう。まず、前述した手順の1でユーザーアカウントを用意するときにローカルユーザーを作成するなら、デスクトップで作業を行ってもよい(次の画像)。
[コンピューターの管理]で新しくローカルユーザーを作る
[コントロールパネル]−[システムとセキュリティ]−[管理ツール]から[コンピューターの管理]を開き、その左側で[システムツール]−[ローカルユーザーとグループ]−[ユーザー]を選び、メニューバーから[操作]−[新しいユーザー]を指定すると、この画像のダイアログが出てくる。 ここでは、ユーザー名として「KIOSK」、ユーザーのフルネームとして「Assigned Access」と指定した。後ほど、「ようこそ」画面でどちらが表示されるか確かめる。
キオスクモード用のアプリをインストールする
次に、キオスクモードで使いたいアプリをインストールする。とはいっても、アプリの開発中にはWindowsストアからインストールできない。キオスクモードのアカウントでVS 2013を使わないのであれば、アプリのパッケージを作ってキオスクモードのアカウントでインストールする。
そのようなテスト用のパッケージは、Windowsストアにアップロードしないパッケージとして作成すればよい(メニューバーから[ストア]−[アプリ パッケージの作成]を選択し、[アプリ パッケージの作成]ダイアログの[Windowsストアにアップロードするパッケージを作成しますか?]に対して[いいえ]を選択して、パッケージを作成すればよい)。Windowsストアへのサインインは不要だし、デバッグビルドでも構わない。出来上がったパッケージのファイル群をキオスクモードのアカウントでアクセスできるところに置いておき、キオスクモードのアカウントでサインインしてパッケージをインストールする(次の画像)。ただし、開発機ではないPCにインストールする場合は、その前に開発者用ライセンスを取得しておかねばならない*4。また、開発機にインストールする場合は、デバッグ実行したときにインストールされたアプリを事前にアンインストールしておかねばならない*5。
開発中のアプリのパッケージをインストールする
キオスクモードのアカウントでサインインして、パッケージをインストールするためのPowerShellスクリプト(拡張子「.ps1」のファイル)を実行する。PowerShellスクリプトを実行するには、右クリックして[PowerShellで実行]を選ぶ。
*4 テスト機で開発者用ライセンスを取得する手順は、MSDNの「開発者用ライセンスの取得」をご覧いただきたい。 なお、開発者用ライセンスで実運用を行ってはならない。Windowsストアで公開せずに実運用を行うには、サイドローディングという手続きを踏む。詳しくは、TechNetの「DISMによるアプリの追加と削除」を参照してほしい。 *5 キオスクモードでのテストを終えてから開発作業を続けるときには、キオスクモードのアカウント側でアプリをアンインストールしなければならない。
今回は、次の画像のようにいくつかのアプリをインストールした。その中の1つは、インストール後に普通に実行してセカンダリタイルを作成しておいた。
アプリをインストールした後のスタート画面
キオスクモードのアカウントでサインインしたときのスタート画面である。 「開発中のアプリ(1)」は、「連載:Windowsストア・アプリ開発入門」で制作中のものである。インストール後に実行して、セカンダリタイルを作成(=スタート画面へピン留め)しておいた。 「Windowsストアからインストールしたアプリ」は、筆者が公開しているアプリである。オプション設定用のフライアウトの動作を確認するために、Windowsストアからインストールした。 「開発中のアプリ(2)」は、今回の実験のために作ったものだ。後ほど説明する。
キオスクモードのユーザーとアプリを選択する
キオスクモードのアカウントでのアプリの準備が完了したらサインアウトして、あらためて管理用のアカウントでサインインする。設定チャームを開き、[PC設定の変更]−[アカウント]を選択し、[その他のアカウント]を開いて、[割り当てられたアクセスを使うアカウントをセットアップする]のリンクをクリックする。そこでキオスクモードのために用意したアカウントとアプリを指定すれば、キオスクモードの設定は完了だ。
アプリを指定する様子を次の画像に示す。選択肢にセカンダリタイルは表示されていない。すなわち、キオスクモードではセカンダリタイルから起動できないのだ。アプリの起動時にパラメーターを渡せないということである。
設定が終わったら、Windowsを再起動する。再起動後に管理者アカウントのサインイン画面が出てきた時は、左向き矢印ボタンをタップするとユーザーの切り替え画面になるので、キオスクモード用のアカウントでサインインする(次の画像)。サインインすると、指定したアプリがキオスクモードで起動する。
キオスクモードのアカウントでサインインする
自動ログオンを設定していないときは、Windowsを起動したときに他のアカウントのサインイン画面が出てくることがある(上の画像)。 左向き矢印ボタン(赤丸内)をタップすると、ユーザーの切り替え画面(下の画像)に切り替わってキオスクモードのアカウント(赤枠内)でサインインできるようになる。 なお、キオスクモードで動作中にWindowsキーを連続5回押すと、ユーザーの切り替え画面になる(ただし、キオスクモードのアカウントでサインインしたままの状態)。ユーザーの切り替え画面で右下の電源ボタンを使ってリブートされたりするのが不都合な場合は、画面上の電源ボタンを隠すことも可能だ。詳しくはTechNetの「Shutdown: Allow system to be shut down without having to log on」(本稿執筆時点では英語のみ)を参照してほしい。さらに、ハードウェアの電源ボタンも無効にできる。それには、コントロールパネルの[ハードウェアとサウンド]−[電源オプション]を開き[電源ボタンの動作を選択する](または、[ハードウェアとサウンド]で[電源オプション]の下位項目にある[電源ボタンの動作の選択])で設定を変更する。
キオスクモードのアカウントに自動ログオンを設定した場合は、Windowsを起動すると次の画像のような「ようこそ画面」が表示され、続いて指定したアプリがキオスクモードで起動する。
キオスクモードのアカウントを自動ログオンに設定したとき
この「ようこそ画面」が終わると、指定したアプリがキオスクモードで起動する。 「ようこそ画面」には、ユーザーのフルネームとアカウントの画像が表示されている。それらを用途に応じてカスタマイズするとよいだろう。 なお、前述したように、自動ログオンに設定していても、キオスクモードでアプリが動作しているときにWindowsキーを連続5回押せばユーザーの切り替え画面になるので、管理用アカウントでサインインし直すことが可能だ。
キオスクモードでのアプリの動作
キオスクモードだからといって動かなくなるようなWindowsストアアプリはなさそうである。アプリバーや通常のフライアウトも出るし、セカンダリタイルの作成もできる(次の画像)。
キオスクモードでアプリバーとフライアウトを出す
アプリからアプリバーや通常のフライアウトを出せる。アプリバーは、通常のようにエンドユーザーの操作でも出てくる。 また、セカンダリタイルの作成(スタート画面にピン留め)もできる。
ただし、スタート画面にピン留めできる(次の画像)といっても、キオスクモードではそれを使えないことは前述した通りである。
キオスクモードで作成したセカンダリタイル
キオスクモードで動作しているアプリからも、スタート画面にピン留めできた(赤枠)。 この画像は、いったんキオスクモードを解除してからサインインして撮ったもの。キオスクモードのままではスタート画面を表示できない。
画面の右からスライドして出てくるフライアウト (オプション設定などに使うもの)も、アプリのコードからなら出せる(次の画像)。
キオスクモードでオプション設定用のフライアウトを出す
このフライアウトはアプリのコードから出している。ただし、[設定]チャームからではない。 また、このアプリはWin 8用に開発したものであり、Win 8.1で新設されたSettingsFlyoutコントロール(Windows.UI.Xaml.Controls名前空間)は使っていない。
ところで、アプリが異常終了したときなどはどうなるのだろうか?
それを確認するために、Windowsストアアプリのプロジェクトを新しく作り、ボタンのイベントハンドラーに簡単なコードを書いた(次のコード)。アプリ終了/例外発生/無限ループの3種類だ。
private void ExitButton_Click(object sender, RoutedEventArgs e)
{
// (1)アプリを終了させる
App.Current.Exit();
}
private void ExceptionButton_Click(object sender, RoutedEventArgs e)
{
// (2)例外を発生させる
throw new Exception("故意に発生させた例外");
}
private void HangupButton_Click(object sender, RoutedEventArgs e)
{
// (3)無限ループ
while (true);
}
Private Sub ExitButton_Click(sender As Object, e As RoutedEventArgs)
' (1)アプリを終了させる
App.Current.Exit()
End Sub
Private Sub ExceptionButton_Click(sender As Object, e As RoutedEventArgs)
' (2)例外を発生させる
Throw New Exception("故意に発生させた例外")
End Sub
Private Sub HangupButton_Click(sender As Object, e As RoutedEventArgs)
' (3)無限ループ
While True
End While
End Sub
コメントにあるように、(1)はアプリを終了させるもの*6。(2)は例外を発生させ、(3)は無限ループを実行し続けるものである。
*6 以前の「Windowsストア向けアプリ認定要件」には、3.6として「アプリ自身でプログラムを終了したり、アプリを終了するための UI 要素が表示されてはなりません」という要件があったため、自ら終了するようなアプリはなかった。しかし、このようにAPIは用意されているのである。
このアプリをキオスクモードで動かしてみると、次のような結果になった。
(1) アプリを終了させると、直ちにアプリが再起動される (2) アプリで例外が発生して異常終了した場合も、(例外処理のためちょっと時間がかかるが)アプリは再起動される (3) 無限ループに陥ってアプリのUIが応答しなくなった場合は、自動的には再起動されない
実運用においては、(3)の無限ループで再起動されないのは問題になるかもしれない。そのようなバグを作り込まないようにすべきなのだが、次のように操作すれば、管理者アカウントでサインインすることなくアプリを再起動できる。
キオスクモードで応答しなくなったアプリを再起動する手順:
- Windowsキーを連続5回押して、ユーザーの切り替え画面にする
- ユーザーの切り替え画面のまま15秒以上待つ
- 再びキオスクモードのアカウントにサインインする
上の手順2でユーザーの切り替え画面を出してから約10秒後に、アプリは中断状態に入る処理をしろというイベントを受ける(=Suspendingイベント)。そのイベントの処理に5秒以上かかると、アプリはシステムから強制終了させられる*7。合わせて約15秒間が経過すると、アプリは強制終了させられるというわけだ。
*7 MSDNの「アプリケーションのライフサイクル」を参照。
キオスクモードでのアプリの制限
最後に、最も大切なことを書く。
キオスクモードのアプリに対する制限:
- チャームを利用できない
- 他のアプリを起動できない
チャームが使えないというのは、細かく見ると次のことを意味する。
- 印刷できない(その他、デバイスチャームに依存する機能は使えない)
- 共有に送れない
- [検索]チャームが使えない
- オプション設定が出せない(これはアプリにオプション設定を出すためのボタンなどを用意してコードから出せばよい)
エンドユーザーがチャームを出そうとして操作しても、全く反応しない。アプリからチャームを出そうとすると、エラーにはならないが、チャームは出てきた瞬間に閉じてしまう(例えば、上で見た「青空文庫リーダー・ライト」では右上にある虫眼鏡アイコンをクリックすると通常は[検索]チャームが表示されるのだが、キオスクモードではチャームが一瞬表示された後、すぐに閉じてしまうのだ)。
他のアプリを起動できないというのは、Launcherクラス(Windows.System名前空間)のLaunchFileAsyncメソッドとLaunchUriAsyncメソッドが機能しないということである。これも、実行してもエラーにはならない。また、前述したように、セカンダリタイルから起動できないので、アプリの起動時にパラメーターを渡せない。
業務アプリでキオスクモードを検討することもあると思うが、特に印刷できないという制限には気を付けてほしい。また、本稿に載せた以外にも思わぬ落とし穴があるかもしれない。アプリのスペックを検討するときは、並行して実現可能かどうか確かめながら進めるべきであろう。
思わぬ落とし穴といえば、Windows Updateを自動適用にしていない場合、Windows Updateを促す[更新プログラムを利用できます]ダイアログが出てくる(次の画像)。しかし、キオスクモードでは[インストール]ボタンも[閉じる]ボタンも無効になっていてダイアログを閉じられず、アプリを利用できなくなってしまう。その他、バックグラウンドで動作してトースト通知を出すアプリは、アンインストールするか通知を禁止しておいた方がよいだろう。また、カメラが付いている機種では、ロック画面でのカメラアプリの利用を禁止しておくのも忘れないようにしよう。
Windows Updateを促すダイアログはキオスクモードでも出てくる
キオスクモードでは、[インストール]ボタンも[閉じる]ボタンも無効にされており、このダイアログを消せない。筆者の推測としては、個々のボタンが制限されているというよりも、システムが出したダイアログそのものへのアクセスが制限されているように思われる。
まとめ
キオスクモード(=assigned access/割り当てられたアクセス)は、本稿で述べたようなかなり大きな制限がアプリに加わるものの、Windowsストアアプリでキオスク端末を作れる魅力的な機能だ。
キオスクモードの設定方法の詳細については、冒頭でも述べたが次の記事を参照してもらいたい。
また、英文ではあるが次のドキュメントが参考になる。
Copyright© Digital Advantage Corp. All Rights Reserved.