次の方法で共有


UWP で廃止された UserInformation クラスについて

今更ですが、Windows 10 の UWP アプリで、Windows 8.1 のストア アプリとの比較で廃止予定の API があることに気が付きました。そのクラスは、以下になります。

  • UserInformation クラス
    Windows 8.1 までで使用できたクラスで、Windows 10 では正常に動作しなくなっています。
  • User クラス
    Windows 10 の UWP より提供された新しいクラスで、UserInformation を使用していた場合は置き換える必要があります。

この変更の背景ですが、Windows 10 ではプライバシー設定に新しく「アカウント情報」が追加されています。
PrivacySettings
このアカウント情報には、User クラスを使ってアカウント情報へアクセスするアプリに許可を与える操作(ダイアログが表示されます)を行ったアプリが表示されます。また、User クラスを使用するアプリの場合は、Package.Appxmanifest の機能で「アカウント情報」を指定しておく必要があります。

プライバシー設定に「アカウント情報」が追加されたことにより、Windows 8.1 までのアプリの動作に影響を与えてしまいます。Windows 8.1 までは、UserInformation クラスを使ったアカウント情報へのアクセスが自由にできるようになっていました。というのは、プライバシー設定で「アカウント情報」という分類がなかったからです。Windows 10 では、「アカウント情報」が新設されたことにより、Windows 8.1 までのアプリは UserInformation クラスの GetDisplayNameAsync メソッドなどが値を返さなくなります。この問題を避けるには、アプリを UWP に作り替えるしか方法がありません。 なぜなら、Package.Appxmanifest の機能で「アカウント情報」を指定できるのが UWP しかないということと Windows 10 SDK を使用しないと新しい User クラスへアクセスすることができないからです。

User クラスへアクセスするサンプルは、SDK サンプルとして公開されています。

もし、API の非互換情報に気が付きましたら、コメント欄にでも記入をお願いします。

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

Comments

  • Anonymous
    September 29, 2016
    済みません、一つ質問してもよろしいでしょうか?WinUSBを使っているデバイスにアクセスするために、WPFアプリで、あるクラスを使っております。このクラスファイルをUWP(UPF ではないですよね)に取り込みますと幾つかのエラーが出ますので少し修正しました。その上で・・・deviceFound = myDeviceManagement.FindDeviceFromGuid(winUsbDemoGuid, ref devicePathName);・・・では、deviceFoundは trueとなりますが・・・success = myWinUsbDevice.GetDeviceHandle(devicePathName);・・・では、successは falseとなります。デバイスは見つけられるけれども、デバイスハンドルが取得できません。これで行き詰まっております。何か、これに関する情報をお持ちでしたら、ご教授願えませんでしょうか。主題と関係のない問題をコメントして、申し訳ありません。
    • Anonymous
      September 29, 2016
      UWP と仮定してですが、WinUSB.sys はドライバーのことですよね。UWP などのアプリ用のAPI(Windows Runtime)では、直接的にドライバーを操作する従来の API はサポートされていません。その代わりには、Windows.Devices.Usb 名前空間が提供されています。このドキュメントを見て頂くと、Windows ストア アプリのサンプル コードへのリンクもあります。UWP アプリということであれば、githubのSDKサンプルもあります。一度、アプリとして何が出来て何が出来ないかを整理されたら如何でしょうか。