2016年5月28日土曜日

Desktop App Converter PreviewでTungstenを変換してみた

Desktop App Converter (Project Centennial)プレビュー版が公開されたようなので、 UWPには全く縁のないTungstenを変換してみました。

Desktop App Converterとは

Windowsストアに公開できない従来のアプリ(Win32や.net frameworkで作られたいわゆる「デスクトップアプリ」)を、 Windowsストアで配布できるように変換するものです。

もっと簡単に言えば、「インストーラー(.exe, .msi)からWindowsストアのインストールファイル(.appx)に変換する」 といったところでしょうか。

去年開催されたBuild2015で初めて発表され、Build 2016で変換デモが行われました。
※Build 2016ではEvernoteVLC先日開催されたde:code 2016では秀丸を変換していました

「デスクトップアプリをWindows10の全プラットフォームで動くUWP(Universal Windows Platform)アプリ化するもの」と勘違いしそうですが、そのままではWindows 10 MobileやXbox Oneなどで動かすことができません。

Desktop App Converterで変換することによるメリット

  • 閑散としているWindowsストアに登録でき、有料課金もできる (※可能時期未定)
  • ファイル、レジストリが仮想化されるので環境が汚れない
  • インストール、アップデートが簡単になる

などといったメリットがあります。Build2015でMSはそのままWindowsストアに登録できると言っていましたが、いつ登録できるようになるのかどうかは不明です。現時点では、開発者モードにしたWindows10にしかインストールできません。

Tungstenを変換してみた

必要な環境は次の通りです。

  • Windows 10 Enterprise x64 Build 14316以上 (14342以上ならProも可)
    ※Insider Preview版なので、Insider Previewに参加していることも暗黙的に条件に入ります
  • CPUに仮想化支援機能(VT-x、SLAT)が必要
  • Windows 10 SDK (推奨。.appxファイルを生成する場合は必須)

必要な環境を満たしていれば、仮想マシン内でも実行できます。

本当はBuild 14316でも変換できるはずのようですが、試してみたところ変換に失敗して何もできませんでした。 最近公開されたBuild 14342でようやく変換に成功しました。

OSのビルド番号は、DesktopAppConverterに必要なベースイメージ(後述参照)のものに合わせなければなりません。 5/28現在、より新しいBuild 14352用しかないので、14342以下では試せません。

前準備

  1. 設定アプリから、開発者モードに変更
    設定 > 更新とセキュリティ > 開発者向け の順にたどって、「開発者モード」に変更します。
  2. Desktop App Converter Previewをダウンロード (DesktopAppConverter.zip と BaseImage-14342.wim)
  3. DesktopAppConverter.zipを解凍
  4. 管理者権限付きのPower Shellを開く
  5. スクリプト実行制限を解除
    ※セキュリティ上危険と警告が表示される。Yで続行する。
    > Set-ExecutionPolicy bypass
  6. Desktop App Converterをインストール
    > .\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14342.wim -Verbose
  7. 画面の指示に従い再起動。再起動後、ベースイメージの展開処理などが実行されます。プロンプトに戻るまで待つ
  8. Windows 10 SDKをダウンロードし、インストール
    .appxを生成するだけであれば、「Windows App Certification Kit」だけでもOK。

変換、インストール

  1. Desktop App Converterを実行
    TungstenはInno Setupを使用しているため、サイレントインストールオプションを指定する必要があります。
    > .\DesktopAppConverter.ps1 -Installer C:\Inst\tungsten208.exe 
    -InstallerArguments "/VERYSILENT /SP-" -Destination C:\Output\tungsten 
    -PackageName "Tungsten" -Publisher "CN=MSRandJoker" -Version 2.0.8.0 
    -MakeAppx -Verbose
    
  2. 変換したアプリのインストール
    > Add-AppxPackage -Register C:\Output\tungsten\AppxManifest.xml
    

AppxManifest.xmlを使用することで、署名なしでインストールできます。 .appxファイルを配布してインストールする場合は、有効なコード署名が必要です。

起動してみる

インストールしたアプリはスタートメニューに追加されます。試した環境では再起動しないと押せませんでした。 普通のデスクトップアプリとはいくつか違いが見られます。以下はその一例です。

  1. スタートメニューのコンテキストメニューが違う

    通常のデスクトップアプリでは「ファイルの場所を開く」があります。

    それに代わって「評価とレビュー」や「共有」があります(ストアに公開していないのでもちろん機能しません)
  2. 表示されているアイコンがTungsten.exeのアイコンではない
  3. Tungstenが使用するデータが仮想化されている

    Tungstenのローカルフォルダー表示ではC:\Users\[ユーザー]\Roaming\Tungstenが存在しているように見えますが、 エクスプローラーで見ると存在していません。別の場所(UWP専用データ領域)にリダイレクトされています。
  4. タスクバーのコンテキストメニューが違う (上図参照)
    「プロパティ」がありません。しかもアクセスキーまでなくなっています。デスクトップアプリのコンテキストメニューは以下の図。
  5. タスクマネージャーの「アプリの履歴」に掲載される
  6. 管理者権限に昇格してもシステムレジストリは変更できない?
    既定のプログラムに設定しようとレジストリ登録を試みるも失敗。

アイコン、関連付けを修正

アイコンはストア用のアイコンを差し替え、ファイルの関連付けを設定するにはAppxManifest.xmlを編集する必要があります。

アイコンは、出力フォルダーの中のAssetsフォルダー内に格納されています。関連付けは、Application要素内にExtensions要素を挿入することで追加できます。以下はその例です。

      <Extensions>
        <uap:Extension Category="windows.protocol">
          <uap:Protocol Name="ftp" />
        </uap:Extension>
        <uap:Extension Category="windows.protocol">
          <uap:Protocol Name="http" />
        </uap:Extension>
        <uap:Extension Category="windows.protocol">
          <uap:Protocol Name="https" />
        </uap:Extension>
        <uap:Extension Category="windows.fileTypeAssociation">
          <uap:FileTypeAssociation Name="html">
            <uap:SupportedFileTypes>
              <uap:FileType ContentType="text/html">.htm</uap:FileType>
              <uap:FileType ContentType="text/html">.html</uap:FileType>
              <uap:FileType>.mht</uap:FileType>
              <uap:FileType>.mhtml</uap:FileType>
              <uap:FileType>.shtml</uap:FileType>
              <uap:FileType>.xht</uap:FileType>
              <uap:FileType>.xhtml</uap:FileType>
            </uap:SupportedFileTypes>
            <uap:Logo>Assets\TungstenFile.png</uap:Logo>
          </uap:FileTypeAssociation>
        </uap:Extension>
      </Extensions>

AppxManifest.xmlを編集後に再インストールすると、スタートメニューのアイコンが反映され、関連付けも設定できるようになります。

・・・が、関連付けアイコンのサイズ別指定がうまくできませんでした。原因追及するとはまりそうなので、ここまでとします。

最後に

前述のとおり、Desktop App Converterで変換しただけでは完全なUWPアプリにはなりません。 完全なUWPアプリにするには、Build 2016での発表 (リンクはITmediaの記事)によると変換を含めて5ステップ必要になります。ステップ4では「Migrate(移行)」と書かれているので、結局のところ既存のデスクトップアプリを跡形もなくつぶしてしまわないと実現できません。

デスクトップアプリは何でもし放題なところがあるので、UWP化が到底できそうにないアプリもあります(ローカルアプリ取り込みをやるTungstenはまさしくそれ)。 Windowsストアに登録できるようになって販路が広がり、レジストリを汚さないというメリットがあるのは良いことですが、 Windows Phoneが圧倒的なシェアを得ることがない限り、デスクトップ向けに作られているほとんどのアプリは変換されるだけで完全にUWP化されることはないでしょう。

2016/6/2 追記
このように、インストーラーさえあれば誰でも変換できることから、無関係な第三者が勝手にWindowsストアに登録して有料で配布するということも考えられます。MSは有効な対策を考えているとは思いますが、自衛のためにWindowsストアに公開する準備をしておくのがよいのではないでしょうか。