[UWP] シャットダウン

Windows10 IoT Coreは組込機器で動作させることを前提としているのでOS操作用のUIは無い。(スタートボタンとか)
というか、起動したらアプリが実行されてそのアプリしか操作できない状態になる。
だから、[スタートボタン] => 電源 => シャットダウン みたいな操作は出来ない。
でも、組込機器だって電源を切ることはあるからその時にはシャットダウンが必要になる。つまりUWPアプリからWindowsのシャットダウンを行う必要があるってことになる。
そのやり方。

プロジェクトに参照を追加する

まず始めにプロジェクトに参照を追加する。Visual Studio2015のメニューで
プロジェクト => 参照の追加 を選択して参照マネージャーを表示させ、Universal Windowsの拡張で「Windows IoT Extensions for the UWP」にチェックを入れる。
バージョンがいくつかあるが、最新(2017/3/9現在)の10.0.14393.0を選択。
これで、Windows.System.ShutdownManagerクラスが使える様になる。

アプリマニフェストの編集

マニフェストにCapabilityを追加する。
追加項目は、GUIのチェック項目に存在しないので、XMLをテキストで開いて以下の内容を追加する。

  • Packageタグ

(5行目の追加と6行目の"iot"追加)

<Package
	xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
	xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
	xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
	xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
	IgnorableNamespaces="uap mp iot">
  • Capability
<Capabilities>
	<iot:Capability Name="systemManagement" />
</Capabilities>

コード

上に書いた様にWindows.System.ShutdownManagerクラスを使う。
このクラスは、2つのstaticメソッドを持ってる。

public static void BeginShutdown(ShutdownKind shutdownKind, TimeSpan timeout)
システムをシャットダウンする。ShutdownKindは、Shutdown/Restart。
timeoutは、ShutdownKindがRestartの場合に再起動するまでの待ち時間を指定する。

public static void CancelShutdown()
実行中のシャットダウンをキャンセルする。

ということなので、システムをシャットダウンするには

ShutdownManager.BeginShutdown(ShutdownKind.Shutdown, TimeSpan.Zero);

とすればOK。

参考にしたサイト
https://marcominerva.wordpress.com/2016/12/13/how-to-shutdown-a-windows-10-iot-core-device-from-a-uwp-app/