プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

UWPのスタートアップ起動をあきらめた話

あきらめました

f:id:puni-o:20200924091632j:plain

私は「twitterで流れている緊急地震速報tweetを見張って地図上にプロットする」という俺得アプリを公開しています

www.microsoft.com

多分アクティブユーザーは私一人でしょう。ログインするたびにアプリを起動するなんて面倒なので当然ですがスタートアップに登録できるようにしました、アクティブユーザーの100%が求める機能なので実装しないわけにはいきません。スタートアップ登録はStartupTaskクラスを使いました

OS起動時にちゃんと起動しない

いつのタイミングからか(あるいは実装初期からか)、ログイン後にアプリがちゃんと起動しなくなりました

最小化+スプラッシュスクリーンが出たままでメイン画面に遷移してくれません。これは自動起動ではなく手動で起動した場合には起きない現象です。そして適当に作った俺得アプリはメイン画面に遷移しないと機能が動かなかったのです

うれしい(?)ことにレビューにも同様の報告が上がりました

調査

手動起動ではちゃんと動いていたので初めはタイミングの問題(OS起動直後でネットワークが不安定とか)だと思っていたのですが、何度か再起動しても必ず同じ症状になりました

ということでログを仕掛けて実験してみました

起動時のログを確認したところ私の想定していた起動順(ライフサイクル)とは明らかに動作が異なっていました

UWPのライフサイクルは下記リンクにある通り、だと私もUWP世に出た当時に見た記憶があります

docs.microsoft.com

ですがStartupTaskで登録して再起動した場合このライフサイクル通りにはならないようです

ログを消してしまったので詳細は覚えていませんが、OnLaunchedの途中でOnSuspendingが呼ばれるような感じで、すぐにサスペンドされます。猶予はありませんでした

Microsoftのどこかのページで見たのですがStartupTaskで登録したアプリは起動時に必ず最小化されるらしいです。(最小化だけじゃなくサスペンドまでされるとは書いていなかったと思うけど)

この動作がOSの想定通りなのか仕様と違うのかはわかりませんが、そんな感じだったので私は考えることをやめました(俺得アプリだし調べるの面倒になったし)

最新版

ということで昨日リリースした最新版からはこの機能を消しました。すでにStartupTaskで登録している場合には起動時に解除するようにもしてあります(ただし解除処理は正常に起動しないとできない)

おまけ

アプリでのスタートアップ起動はあきらめましたが毎回手動起動なんて面倒なことは私にはできません。ということで手動で自動起動するようにします

以下は私の備忘録的なものですね。方法はショートカットファイルをOSのスタートアップフォルダに入れておく、という昔ながらの方法です

ショートカットを作成

ストアアプリはショートカットファイルを作るのが面倒でこまります

Win + R でファイル名を指定して実行を開いて、shell:appsfolderを実行します

f:id:puni-o:20200924095917j:plain

インストールしているアプリが出てくるので該当アプリ(今回はQuakeInfo)を探して、Shift + 右クリック -> ショートカットの作成

f:id:puni-o:20200924100219j:plain

作成先はデスクトップになると思います

ショートカットをスタートアップフォルダに移動

Win + R でファイル名を指定して実行を開いて、shell:startupを実行します

f:id:puni-o:20200924100339j:plain

先ほど作成したショートカットファイルを出てきたフォルダに移動すれば出来上がり