とっちゃん's Blog

WindowsInstaller に WiX はいかがですか~

目次

Blog 利用状況

ニュース

とっちゃんって?

コミュニティ

メーリングリスト

@ITの記事

CodeZineの記事

WiX チュートリアル

Windows ユーザー エクスペリエンス ガイドライン

唯一の日本語書籍

人気のほどは...

記事カテゴリ

書庫

日記カテゴリ

インストーラ関連

旧館

2016年12月5日 #

[勉強会]わんくま東京#104セッション資料公開

グダグダとおしゃべりしてきました。最後荒井さんが突然現れたのにはびっくりですがw

DLは、こちらから。https://1drv.ms/p/s!AuVVWpjfPyA0hNxqo5mYvaDm9UwtcA

posted @ 14:12 | Feedback (0)

2016年11月30日 #

12/3 はわんくま同盟 東京勉強会 #104

申込ページ:http://www.wankuma.com/seminar/20161203tokyo104/

ということで今週末はわんくま同盟東京勉強会#104。
東京は年内最後なので、忘年会も兼ねてます。

・10:40 ~ 11:00 開場・受付開始
・11:00 ~ 11:10 わんくまについて...
・11:10 ~ 12:00 「レガシー(データベース処理)ワールド」 by 片桐 継 Lv.2くまー
・12:00 ~ 13:00 おひるごはん
・13:00 ~ 13:30 ライトニングトーク
・13:40 ~ 14:30 「HTTPを振り返ってみる」 by がるさん Lv.1.1くまー
・14:40 ~ 15:30 「MSのマルチプラットフォームのはなし」 by 山本美穂さん Lv.2くまー
・15:40 ~ 16:30 「Desktop アプリを UWP アプリに変換するときの注意事項」 by とっちゃん Lv.3くまー
・17:00 ~ 懇親会

こんな感じの時間割なので、濃すぎず薄すぎずですかねーw

東京では一年ぶりかしら?おいらもしゃべりまーす。

posted @ 13:55 | Feedback (0)

2016年10月20日 #

[Desktop App Converter]バッチファイルをインストーラに指定する

Desktop App Converter はどんな形であれ、インストーラさえ用意できれば、appx 化のための間口を用意してくれる優れものです。

ということで、究極の単純インストーラでもある、バッチファイルで実験してみました。

インストール対象は、毎度おなじみ MfcApp.exe(プログラムは、https://1drv.ms/u/s!AOVVWpjfPyA0hNsm からプロジェクトを取得してねw)。

今回は単純に実験なので、MfcApp.exe をコピーするだけの単純なプロジェクトで関連付けなどのレジストリ設定は一切ありません。

用意したバッチファイルもごく単純なもので、

@ECHO OFF
XCOPY Release\MfcApp.exe C:\Samples\MfcApp\

という内容です。

上記プロジェクトのソリューションフォルダに install.cmd という名前で用意しました。

 

まずは結論。

バッチファイルをインストーラにすることができます。

バッチファイルなので複数の処理も指定可能です。ユーザー入力を要求しない限りどのプログラムを実行しても問題なく実行できます(管理者権限を持って動作しているという前提になります)。

これで一気に敷居が下がりますね。

合わせて実験的ですが XCOPY コマンドを直接指定するなども行ってみましたが、これらは失敗してしまいました。

どうやら、システムフォルダはリダイレクトされてしまう関係でうまくいかないみたいです(フルパス指定じゃないとファイルがないって怒られる。。。)

 

そのほかの注意点は

XCOPY するだけで、ショートカットアイコンを作らないので判断材料がガクッと減ります。

そのため、プライマリアプリケーションがわかりませんので、AppExecutable が必須になります。

また、インストール先もわからないので、AppInstallPath がないとW_INSTALL_PATH_NOT_DISCOVERED という warning が出ます。

ということで、指定パラメータは

DesktopAppConverter ?Installer SampleDAC\Install.cmd ?Destination AppxOutput ?PackageName MfcApp ?AppExecutable C:\Samples\MfcApp\MfcApp.exe ?AppInstallPath C:\Samples\MfcApp ?Version 1.0.0.0 ?MakeAppx ?Verbose

という感じになります(見ながら打ち込んだのであってるかどうか自信ないわw)

これで、インストーラなんて作ったことないよ!という人でもサクッと作れますね。

ポイントは、

  1. 出力先は極力単純にする(typo防止策)
  2. 原則パラメータは全部省略できないと思うべし。

です。

あと、忘れがちですが、ここで出来上がるappx はインストーラです。当然作成環境とは異なる環境で動作するのでその点も忘れないようにしましょう。

posted @ 15:10 | Feedback (0)

2016年10月14日 #

[Desktop App Converter]コンバート時にインストーラを実行するところでエラーになる場合

IP FastRing に 14946 が降ってきました。ということで、14942 は wim がないまま終わってしまったので、再び環境構築。

タイミング次第(出た直後くらいw)では新しいのを指してくれないことがありますが、最新イメージは http://aka.ms/converterimages の短縮URLでアクセスできます(ちゃんとメンテナンスされています)。

2016/10/12 公開版では、14393(CB), 14931(IP-Slow), 14946(IP-Fast) の3つが公開されています。

ということで環境に合わせてDL&セットアップ。。。するのですが、

以前のビルドで利用したことがある場合、コンバートに失敗(エラーコード:0xC0370101)することがあります。

スクリプト的には E_CREATING_ISOLATED_ENV_FAILED というエラーがでるのですが、エラーコードも文字通りコンテナのイメージが想定しているものじゃない!というもの。

ほかに、自分の経験では同じタイミングで BSOD になることもありました。

現状での対処としては、まず完全クリーンナップをします。

コマンドは「 DesktopAppConverter ?Cleanup All 」

コマンドを実行すると、既存の展開イメージの削除などを行い、最後にコンテナをアンインストールして再起動します。

再起動してきたらきれいになっているので、

改めて、「DesktopAppConverter ?Setup ?BaseImage …\BaseImage-14946.wim」

として改めてセットアップを行います。この時もやはり再起動が要求されますので、再起動します。

ちなみにストア版だと再起動要求でUIを出さずにエラーメッセージが出て、処理を中断します(この時点で、リブート後に継続するように設定されている)。

状態を確認して、再起動が要求されている場合は手動でいいのでOSを再起動します。

再起動後にログインすると、wimの展開などセットアップ作業を継続しますのでこれの終了を待ちます。

これで、再び使えるようになります。

 

もし、これでもダメだった場合、Hyper-V ごと再インストールするとうまくいくかもしれません。

つい先日 SlowRing な会社マシンに降ってきた 14931 が、Hyper-Vをアンインストールしてくれたので(インポートができないので、vhdつかって新規構築の必要があるというね…orz) そのあたりの影響があるかもしれません。

posted @ 15:48 | Feedback (0)

C++/WinRT

C++/WinRT Available on GitHub

なんていうものが出てきました。Native の C++ プロジェクトで、Windows Runtime API を使うためのライブラリらしいです。

これってば、Desktop Bridge アプリで使ったらUWPAPIも結構使えるんじゃないか?という気がする。。。もちろん、気がするだけで試してはいませんw

最も UWP API は C++/CX からじゃないと使えないならダメなんだけどねw

落としてないのでこれ以上はよくわかってませんが、VS2015 Update 3, VS”15” Preview などで使えるらしいです。

posted @ 12:25 | Feedback (0)

2016年10月3日 #

[MVP]再受賞しました。

カテゴリーは、長くなった Visual Studio And えーっと。。。Development Technologies です。

もうね。覚えられないわけですよ。長すぎて。一部界隈では、VSDT と略されていたりもするようですが、なんか新しいの出た?という気がして何気に使うのが微妙というねw

 

ということで、12年目に突入です。

よろしくお願いします。

posted @ 11:39 | Feedback (2)

2016年9月29日 #

[Desktop App Converter]最新のWindows Insider Previewを適用したら

現地時間 9/28 に、Windows 10 Insider Preview Build 14936 が公開されました。

Build 14936 については https://blogs.windows.com/windowsexperience/2016/09/28/announcing-windows-10-insider-preview-build-14936-for-pc/ を見てもらうとして。。。

DesktopAppConverter はコンテナを使ってアプリケーションをインストールして差分情報を吸い上げます(吸い上げ精度が高すぎてそれいらねーよってのもいっぱいありますがw)。

その動作のために、専用のベースイメージがあります。

ということで、最新IPを導入したら検索。。。と思ったら、

http://aka.ms/converterimages が最新イメージに付け替えられていました。

これで検索しなくて済むぞ!という感じです。

ちなみに検索する場合はこちらのリンクをどうぞw

posted @ 13:20 | Feedback (0)

2016年9月28日 #

[Desktop App Converter] VC++ ランタイムを共有 appx としてリンクする

このブログでもずいぶん前にちらっと紹介した、VC++ ランタイムを共有APPXとして設定する方法を改めて。

公開当初はDesktopAppConverter 側が対応していなかったのですが、公開後のバージョン(0.1.24)から、自動取り込みに対応しています。

対応にはあらかじめランタイムパッケージ情報をセットアップしておく必要があります。

具体的には

から自分が必要なパッケージをDL&インストールする必要があります。

これらをインストールしたら、あとはmsi(exeでもよい)で、必要バージョンのVCランタイムのマージモジュール(中途半端でも検出してくれます。優秀ですw)をセットするか、Bundle やVSIの必須コンポーネントなどを利用して同時インストールするインストーラを用意してコンバートするだけです。

ちなみに、上記ランタイムがインストールされている環境で、コンバート時にモジュールを見つけると

AppxManifest.xml の Dependencies 項目が

<Dependencies>
  <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
  <PackageDependency Name="Microsoft.VCLibs.140.00.UWPDesktop" MinVersion="14.0.23810.0" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" />
</Dependencies>

という感じになります(上記はVC14での例)。

簡単ですね。

 

一応。。。このブログエントリーを書くときに確認した範囲では、上記リンクより新しいバージョンはリリースされていませんでした。

posted @ 16:07 | Feedback (0)

2016年9月26日 #

[Desktop App Converter]コンバートしてみよう

環境構築ができたら、まずは簡単なインストーラを使ってコンバートの実験をしましょう。

非常に残念な話ですが、どの環境でもコンバートが成功するとは限りません。私物環境(14931)ではなぜかBSODが出るように。。。ひとつ前のIP(14926)から出るようになってしまったのですが、Hyper-V の入れ直し程度では復活しませんでした><

RTWしたやつからなので、何とも微妙ですが会社環境(14393)では動作するので、環境依存の何かなんでしょうねぇ。。。ほかに動かねーという情報も見ないし><

 

さて…気を取り直して。

PSコンソールを管理者で起動して、DesktopAppConverterの展開フォルダに移動します(ストア版でもOK)。

コマンドラインオプションはいろいろあるのですが、基本的なコンバート作業で利用するのは

-Installer インストーラのパス(相対パスまたはフルパス)

-Destination コンバート後のデータの出力先基本フォルダ

-PackageName UWPアプリのパッケージ名

-Publisher パブリッシャー情報(CN は必須。それ以外はオプション)

-Version パッケージのバージョン

の必須パラメータと

-MakeAppx コンバート時に自動的に appx まで作成(つけない場合は、appx に必要なファイルの作成まで。本番リリース向け環境では手動修正が必須なのでつけない)

-Sign appx作成時に自己証明書を作成してそれで署名してくれるオプション(実験専用)

-Verbose 作業状況のコンソールへのフィードバック(これがあると時間がかかる代わりに何をやっているかが一目瞭然)

の計8つ。それと、exe形式のインストーラのコンバートで利用する

-InstallerArguments インストーラをサイレントインストールで実行する場合のパラメータ(msiのサイレント用パラメータは自動でセットされる)

-InstallerValidExitCodes インストーラの成功終了時の終了コード(0以外で終了するexeなどで指定する)

というあたりでしょう。ほかにもありますが、複雑な製品攻勢になっていなければ、この程度でだいたいコンバートできます。

コマンドラインサンプルの実行例は(ストア版の場合 ps1 へのパスが通っているのでそのまま名前で変換可能)

.\DesktopAppConverter.ps1 -Installer ..\SampleDAC\SetupMfcApp\bin\Release\SetupMfcApp.msi -Destination ..\outputDAC -PackageName MfcApp -Publisher CN=Tocchann -Version 1.0.926.0 -MakeAppx -Verbose -Sign

という感じになります。

これを実行するとそのコンソール上で(ISEだと多少グラフィカルになります)、以下の項目を随時通知しながらコンバートが行われます。

  • Checking Prerequisites
  • Initializing AppxManifest.xml
  • Validating Input
  • Setting up Conversion Environment
  • Running Installer in Isolated Environment
  • Preparing Virtual File System
  • Preparing known folder and application directory layout
  • Preparing Virtual Registry
  • Finalizing AppxManifest.xml
  • Checking for Unsupported COM Usage
  • Preparing Final Output
  • Making Final Appx Package
  • Signing Appx Package

成功すれば、最後に

Output Paths:

Name Value
---- -----
CertPath C:\Sample\outputDAC\MfcApp\auto-generated.cer
PackageFilesPath ..\outputDAC\MfcApp\PackageFiles
PackagePath ..\outputDAC\MfcApp\MfcApp.appx
LogFilesPath ..\outputDAC\MfcApp\logs

という感じで出力されます(見やすいようにテーブル化していますが、実際はスペースでそろえてあるだけです)。

プレビューの時には、-MakeAppx をつけているとルートに配置されるファイルが PackageFilesPath に展開されなかったのですが、リリース版ではこれらも展開されます。

ここまでがごくごく簡単な作業手順です。

posted @ 13:23 | Feedback (0)

2016年9月23日 #

[Desktop App Converter] まずは、環境構築。

正式リリースも出たので、ぼちぼちと環境作るのもネタにしておきたいところ。記事として仕立てるには旬が短すぎるのがねーw

ということで、ざっくばらんに環境構築編。

まずは、開発環境の用意。雑記で上げたほかのツールはわかりませんが、Desktop App Converter 自身は、ちょっと野心的なつくりをしていて、Windows コンテナを利用しています。

そのため、動作条件が

  1. Windows 10 Anniversary Update 以上(Build14393以上) の Pro. または Ent. 版 の x64版
  2. Hardware-assisted virtualization and SLAT(Second Level Address Translation)対応の 64bit CPU
  3. Windows 10 SDK 1607 以上

と、若干ハードルが高い設定になっています。

1 が必要なのは、Windows 10 Anniversary Update(以後Win10-1607)で追加された Windows コンテナを利用するため。

そして、2が必要なのは、そのコンテナを動かすため。という形になります。

3は、コンバータ自身の機能ではなく、そこから呼ばれる appx にするツール(SDKに同梱)と、署名のためのツール類(こちらもSDKに同梱)のためというのが主な理由です。

もっとも、対象とするアプリ本体もWin10-1607以上での動作が前提なので、アプリの開発環境としても、SDKは必須ですがw

 

さて、実際に時効可能な環境を用意したら最初にやることは「Download Center を検索」して最新バージョンを探すこと。

コンバーター自身はストア版があるのでこちらを利用することもできますが、これとは別に BaseImages という、コンテナ上で使う専用のイメージを用意する必要があります。ちなみに、最新版にzip形式のコマンドラインツール(PowerShellコマンドファイル)もあります。

このブログ記事の公開時点での最新版(9/21版)には、14393(AnniversaryUpdate/IP Slow)、14915、14926、14931 の3つのIP向けと、1.0.0.0の zip版があります。

ここから、ベースイメージの該当版等々をDLしてきます。zip を展開する場合は、自分にとって都合のいい場所に展開しましょう(パスを切るなどは不要です)。

 

ここからは管理者アカウントが必要になります(パスワードを入れずに昇格すれば管理者になるアカウント)。

ストア版は管理者として実行、zip版はPSコンソールを管理者でオープンします(ISEでもOK)。

コンソールの場合は、展開先フォルダに移動して

DesktopAppConverter ?Setup ?BaseImage …\BaseImage-14xxx.wim ?Verbose

と入力して、コンテナのセットアップと wim のインストールを行います。

OSの確認、環境のチェックなどなどの後、Hyper-Vとコンテナのインストールを行います。インストール済みの場合はここはスキップ。

この時、環境によっては再起動が必要になります。以前は自動で再起動して継続してくれたんですが、正式版では自動リブートしないで、-NoRestart を付けた時と同じ状況になるので、手動で再起動していきます。

再起動してログインすると自動的にスクリプトが継続実行されるので、必要に応じて再起動しつつ終了を待ちます。

Hyper-Vも含めるとコンテナのセットアップにざっくり10分くらいはかかるので(もちろん環境によるのでもっと速いマシン(5分もかからない)もありますしその逆もあります)、気長に待ちます。

筋トレ でもいいのですが https://developer.microsoft.com/ja-jp/windows/bridges/desktop あたりを眺めているとよいでしょう。

と、ここまで来てようやく準備完了。おっと。。。SDKをインストールしていない場合はSDKもインストールします。

Visual Studio 2015 以上を持っている場合は、Update3を適用して SDK Tools 1.4.1 を導入しましょう。

これでやっと準備が完了です。ちなみに、あれこれないと本気で一日くらいかかってしまいます。

posted @ 14:20 | Feedback (0)