DAC と PRI リソースについて

English Follow (Added at 2-Feb). 以前に Desktop App Converter で変換したアプリで、スケーリング対応アセットを使用する方法を解説しました。先週頃(1/23の週)に DAC アプリが、バージョン 1.0.6 にアップデートされました。ドキュメント上は、Icon Extraction とクリーン アップの向上、バグ対応とだけ記載されていますが、使ってみて大きな変更点と言えるのが、提供されるアイコンなどのリソースの扱い方が変更されたことです。具体的には、次のような変更が行われています。 アイコンの種類が大幅に増えたこと AppLargeTile.scale-xxx.png, AppList..scale-xxx.png, AppMedTile.scale-xxx.png, AppSmallTile.scale-xxx.png, AppWideTile.scale-xxx.png, AppStoreLogo.scale-xxx.png, AppList.targetsize-xxx.png, scale は、100、125、150、200、400 の 5 種類で targetsize は、16、24、32、48、256 で通常と altform-unplated の 2 種類のために 10 種類になっています。エントリー ポイントの実行ファイル (EXE) にアイコン リソースが含まれていると、アイコン リソースから自動生成されます。 スケーリング対応による AppxManifest.xml への影響 Resource 要素の uap:Scale に 100、125、150、200、400 を定義。 各種のアセット名は、スケーリング対応(ファイル名に scale-xxx…

0

DsktopBrigde (DACを含む) サンプルについて

今回は、Desktop App Converter のチュートリアル的なサンプルであり、DesktopBridge Sample を紹介します。具体的には、実際のコードを見て頂くとして、この記事ではどのようなサンプルが提供されていて、どのような構造になっているかを解説します。 最初の入門として見るのは、HelloWorldSample か JourneyAcrossTheBridge のサンプルになります。 HelloWorldSample cs フォルダと CentennialPackage フォルダが含まれており、cs フォルダが C# のコンソール アプリケーションになっており、CentennialPackage フォルダは、手作業でAppxを作成するための Appx レイアウト フォルダになっています。このサンプルでは、Desktop App Converter を使用することなく、デスクトップ アプリを Appx パッケージにすることを学習するためのものになっています。 JourneyAccrossTheBridge このサンプルには、ステップ1からステップ5までの5種類が含まれています。学習の流れで説明すると、ステップ1 から ステップ 3が、Windows Forms のデスクトップ アプリを Appx 化 (ステップ1) して、タイル更新を追加(ステップ2)、バックグラウンド タスクを追加(ステップ3) と順番に既存のデスクトップ コードを機能拡張する流れになっています。 ステップ 4 以降は、それまでの流れではなく、UWP のアプリから デスクトップのコードを アプリ サービスとして使用し(ステップ4)、完全な UWP アプリへの移行(ステップ 5)となっています。 ステップ1…

0

アプリのスケーリング対応アセットについて

TechSummit では、「デスクトップ アプリを Windows ストアで公開するには」というお話をさせていただきました。この話では、Desktop App Converter (以降は、DAC と略します)を使用して、インストーラを Appx に変換したり、変換できるアプリの条件などを色々と説明しました。色々な作業を得てから、最終的なアプリに仕上げる時に必要になるタイル アイコンなどを説明するのが、今回の話題になります。 タイルなどのアセットの詳細は、「タイルとアイコン アセットのガイドライン」に詳しく説明があります。内容を読むと、スケール ベースとターゲット ベースのアセットがあることが理解できます。 スケール ベース xxxxxx.scale-100.png など、スケーリングの倍率(100、200、400、etc)に応じて切り替えるアセット。 ターゲットベース xxxxxx.targetseize-16.png など、ターゲット サイズに応じて切り替えるアセット(正方形)で、エクスプローラなどの Windows のシステム側で使用するものになります。 Visual Studio 2015 で UWP アプリのプロジェクトを作成すると、自動的にスケール ベースのアセットなどが使用できる状態になっていますので、使用するアセットをプロジェクトに追加していくことで、ターゲット サイズのアセットなども使えるようになります。ちなみに、UWP プロジェクトを新規で作成した時に、テンプレートが作成するアセットは次のものになっています。 LockScreenLogo.scale-200.png SplashScreen.scale-200.png Square44x44Logo.scale-200.png Squrae44x44Logo.targetsize-24_altform.png Square150x150Logo.scale-200.png StoreLogo.png Wide310x150Logo.scale-200.png つまり、ロックスクリーン、スプラッシュ スクリーン、小さいタイル、正方形タイル、ワイドタイルと システム用のターゲット サイズのアセット、ストア ロゴの 7 つが含まれています。一方で、DAC で作成した アプリに含まれているのは、次のようなアセットになります。 SampleAppx.44×44.png (44px x 44px)…

0

Desktop App Converter について

Desktop App Converter の v1.0 がリリースされましたので、情報を整理することが、この記事の目的になります。最初に、リリース形態は以下のようになります。 v1.0 は Windows ストア 経由での提供になります。改善したバージョンは、Windows ストアからの提供のみになることがアナウンスされています。 ベースイメージは、ダウンロード センター経由での提供になります。 現時点(10/5)では、Anniversary Update(ビルド 14393) と Insider Build 14915 と 14926、そして DesktopAppConverter の v1.0 の Zip イメージがダウンロードできます。 Desktop App Converter(DAC) を試す前に読んで頂きたいのが、「デスクトップ アプリを UWP に変換する準備をする」というドキュメントで、日本語版は翻訳が追い付いていませんが、英語版のドキュメントに以下のような記述があります。 「Your app is already a full UWP app and wants to invoke a full trust process from within the…

0

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

今更ですが、Windows 10 の UWP アプリで、Windows 8.1 のストア アプリとの比較で廃止予定の API があることに気が付きました。そのクラスは、以下になります。 UserInformation クラスWindows 8.1 までで使用できたクラスで、Windows 10 では正常に動作しなくなっています。 User クラスWindows 10 の UWP より提供された新しいクラスで、UserInformation を使用していた場合は置き換える必要があります。 この変更の背景ですが、Windows 10 ではプライバシー設定に新しく「アカウント情報」が追加されています。このアカウント情報には、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…

2

Windows ランタイム コンポーネント ブローカーについて

de:code 2016 のサンプルに Windows ランタイム コンポネント ブローカーの UWP が含まれており、その使い方のドキュメントも含めていました。まだ日本語訳はありませんが、「Windows ランタイム コンポーネント ブローカー」の記事が公開されました。この記事には、 サンプル (IPC サーバーのみ) UWP 用のプロジェクト テンプレート へのリンクが含まれています。また、vcvarsall.bat の引数なども解説されています。このドキュメントの公開と同時期に、Windows ストア アプリのドキュメントも英語版が更新されています。 プロジェクト テンプレートでプロジェクトを作成して、プロジェクト ファイルを見れば、マネージ デスクトップ アプリとUWP で説明したプロジェクト ファイルへの変更が行われていることも確認することができます。 技術的には、Windows 10 には、デスクトップ ランタイム(.NET Framework)、Windows ストア アプリ ランタイム(Windows 8.1互換ランタイム)、UWP アプリ ランタイム(Windows ランタイム、.NET Core)の3種類があるので、Windows ランタイム コンポーネント ブローカー自体はデスクトップ ランタイムで動作しますので、動いて当たり前というものになりますが、テンプレートが公開されましたので、これを使用することで容易に Windows ランタイム コンポーネント ブローカーを Visual Studio 2015 で作成できるようになったということになります。  …

0

バイナリ シリアライザについて

オブジェクトをシリアライズする時に、どのシリアライザを使用するかによってデータの互換性を含めて、様々な問題が発生することがあります。.NET Framework や Mono を使った開発で、利用するシリアライザの種類を列挙します。 バイナリ シリアライザBinaryFormatter が標準で組み込まれていますので、使われるケースが多いと思われます。標準以外にも様々なシリアライザが OSS として開発されていたりします。 XML シリアライザDataContractFormatter が標準で組み込まれています。 JSON シリアライザ標準で用意されているシリアライザを使用したり、Json.net を使用することが多いと思います。 バイナリ シリアライザを使用する時の資料は、MSDN ライブラリに掲載されています。バイナリ シリアライザを使用する時の注意は、以下の点になります。 シリアライズするクラスの型を持つアセンブリをライブラリにすること。 後日にクラスにメンバーを追加した場合は、バージョン トレラントを確保すること。 バイナリ シリアライズで作成されたバイナリ データには、「アセンブリ識別子(アセンブリ名、バージョン、カルチャ、パブリック トークン)」と「型の完全名(名前空間。クラス名)」、「シリアライズするフィールド名」と「データ」が記録されています。クラスという型の情報は、アセンブリのType Definition で定義されており、デシリアライズする時に型情報が一致しないとデシリアライズが失敗します。この理由で、シリアライズする型を定義するアセンブリをライブラリにしておくことで、デシリアライズのエラーを削減できるようになります。 シリアライズの基本的な使い方 シリアライズ対象になるクラスが、SerializeSample というアセンブリで、Person クラスが以下のように定義されていたとします(シリアライザは、内部でリフレクションを使用しています。リフレクション API が変更されると、その影響を受けることもあります)。 using System; namespace SerialSample { [Serializable] public class Person { public Person() { } public string Name { get; set;…

0

Desktop App Converter について

Desktop App Converter とは、デスクトップのアプリを UWP アプリのパッケージ (APPX) へと変換するツールになります。このツールが発表されたのは、2015 年の Build Conference であり、2016 年の Build Conference の後にプレビュー ツールが公開されました。Desktop App Converter の最新版は、ダウンロード センターより入手することができ、2016 年 6 月 8 日時点では 0.1.15 であり、Windows Insider の Build 14352 に対応しています。このツールを用いた作業は、以下のような手順で進みます。 環境設定 Powershell の実行ポリシー設定を行ってから、ベース イメージの展開を行います。この作業には、Windows の機能として「コンテナ」が必要になります。 コンテナを有効にしないで、「.\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14352.wim」コマンドを実行すると、最初にコンテナを有効化にしてから、リブートとなります。リブートした後にサインインすると、ベース イメージの展開が自動的に始まります。 この作業は、環境設定ですので一度だけ実施すればよいものになります。 アプリの変換 アプリを変換するには、MSI パッケージか独自のセットアップ プログラムが必要になります。独自のセットアップ プログラムの場合は、セットアップの Exit Code が「0(ゼロ)」になっているかどうかをご確認ください。もし、Exit Code がゼロ以外の場合は、「-InstallerValidExitCodes」オプションを使って Exit…

0

de:code 2016 の CLT-004 のサンプルを公開します

いつもながら、遅筆の荒井でございます。de:code 2016では、「CLT-004 Windows 10 におけるアプリの互換性と移行」と「CLT-012 インサイド UWP アプリ」を担当させていただきました。参加されました方は、有難うございました。この記事には、CLT-004 Windows 10 におけるアプリの互換性と移行 で使用したデモのサンプル コードを添付しています。含まれるサンプルは、以下のようになります。 Windows Forms における高 DPI クリップボード ドラッグ & ドロップ 拡張子の関連付けとカスタム プロトコルの関連付け アプリ サービス Northwind アプリ ブローカー アプリ ブローカー:このサンプルはデモで使用していませんが、Windows ランタイム コンポーネント ブローカーを作成するための学習用のものです。 含まれていないデモとしては、Desktop App Converterでサイトー企画様よりデモでの使用を許可していただいた「秀丸エディタ」を変換し、自分で作成した.NET Framework 4.6の WPF アプリを変換し、「Desktop To UWP Project」テンプレートを使用した Windows Photo と連携させたものがあります。この WPF で使用したサンプル コードの基本的な考え方は、アプリ サービスに含まれる「LaunchUrlForResultAsync メソッド」の使い方と同じになりますので、ご興味がある場合は、自分で試してみてください。 サンプル コードの使用に関しては、自己責任でお願いします。 CLT-009 サンプル…

0

マネージ デスクトップ アプリと UWP

Windows ストア アプリの時は、「マネージ デスクトップ アプリと Windows ランタイム」というドキュメントがありました。Windows 10 の UWP アプリのランタイムをデスクトップから使う方法がないかと調べたので、その使い方を簡単にまとめます。 WPF アプリなどのプロジェクトを Visual Studio 2015 で作成します。 ソリューション エクスプローラで、プロジェクトをアンロードします。 アンロードしたプロジェクトのコンテキスト メニューより、コードの編集を行います。 <PropertyGroup> <TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion> </PropertyGroup> 上記のコードをプロジェクト ファイルへ追加して、上書き保存します。 プロジェクトの再読み込みを行います。 参照の追加を行います。 C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd と C:\Program Files (x86)\Microsoft SDKs\NETCoreSDK\System.Runtime.WindowsRuntime\4.0.10\lib\netcore50\System.Runtime.WindowsRuntime.dll の2つへ参照を設定します。 後は、必要なクラスを使用するだけです。 Windows.winmd は、Windows Runtime の参照用のメタデータになります。 System.Runtime.WindowsRuntime.dll が、Microsoft SDKs\NETCoreSDK になっている理由は、UWP アプリが .NET Core がランタイムになっているためです。Windows 8.1 までは、.NET Framework のサブセットという位置づけでしたので、C:\Program…

1