2016/09/22(木)DesktopAppConverterを使ってみました。

cnv_001.jpg


9/15にDesktopAppConverterの正式版が公開されましたので、動作を確認してみました。
実際に試してみるとWin32アプリケーションを変換するまでに結構な手間がかかりましたので忘備録として手順を記載します。

DesktopAppConverterはHyper-V上で動作します。
このため設定を有効にする必要があります。

設定は「コントロール パネル - すべてのコントロール パネル項目 - プログラムと機能」内のWindows機能の有効化または無効化にあります。

cnv_002.jpg

1. Windows StoreからDesktopAppConverterをダウンロードします。

ストアのアドレス
https://www.microsoft.com/ja-jp/store/p/desktopappconverter/9nblggh4skzw

MSDNでの説明文
https://msdn.microsoft.com/en-us/windows/uwp/porting/desktop-to-uwp-run-desktop-app-converter#run-the-desktop-app-converter

2. DesktopAppConverterは仮想マシン上で動作しますので、仮想マシンイメージを入手する必要があります。

以下のアドレスから入手します。

https://www.microsoft.com/en-us/download/details.aspx?id=53841

cnv_003.jpg


今回は、Windows10 Aniversary Update (Build 14393)で実施しましたので、BaseImage-14393.wimをダウンロードしています。

3.スタートメニューからDesktopAppConverterのターミナルを起動します。

004.jpg


※管理者として起動する必要があります。

4.以下を入力しHyper-Vのコンテナ機能を有効にします。

 Enable-WindowsOptionalFeature -Online -FeatureName containers -All

5. 2.でダウンロードしたベースイメージを登録します。

 DesktopAppConverter -Setup -BaseImage .\BaseImage-14393.wim -Verbose
009.jpg


※かなりの時間(30~60分)がかかりますので注意してください。

6. Windowsを再起動し、再度DesktopAppConverterを起動します。

7. 任意のディレクトリを作成し、Appxに変換するインストーラをコピーします。

ここでは以下のようにしました。

作成したディレクトリ : c:\MangaViewer
変換するインストーラ : MangaViewer_setup.exe

8. DesktopAppConverterを使用してインストーラをappx形式に変換します。

DesktopAppConverter.exe -Installer c:\MangaViewer\MangaViewer_setup.exe -InstallerArguments "/VERYSILENT" -Destination C:\Output\MangaViewer -PackageName "MangaViewer" -Publisher "CN=example" -Version 0.0.0.1 -MakeAppx -Verbose

9. C:\Output\MangaViewer\MangaViewer\MangaViewer.appxにWindowsStoreアプリ一式のファイルが作成されます。

10. 実行するには署名する必要があります。以下の手順で署名します。

(1)スタートメニュー内の「開発者コマンド プロンプト for VS2015」を実行しコマンドプロンプトを開きます。
(2)以下のコマンドを入力し署名を作ります。

 MakeCert.exe -r -h 0 -n "CN=example" -eku 1.3.6.1.5.5.7.3.3 -pe -sv example.pvk example.cer
 pvk2pfx.exe -pvk example.pvk -spc example.cer -pfx example.pfx

(3)garakuta.cerをダブルクリックします。
(4)証明書のインストールを選択します。
006.jpg

(5)ローカルコンピュータを選択して、次へ進みます。
007.jpg

(6)「証明書をすべての次のストアに配置する」を選択し、参照から「信頼されたルート証明機関」を選択し、次に進みます。
008.jpg

(7)完了を選択し証明書のインストールを完了します。

11.署名を行います。

 signtool.exe sign -f example.pfx -fd SHA256 -v C:\Output\MangaViewer\MangaViewer\MangaViewer.appx

12.PCに登録します。

 Add-AppxPackage -Path C:\Output\MangaViewer\MangaViewer\MangaViewer.appx
010.jpg


以上の手順でスタートメニューにアプリケーションが登録され動作が可能になります。

2016/08/13(土)Xamarin + ZXing.Net.MobileでQRコードを読む

xamarin / UWPでQRコードを読み取るコードを実践してみました。
QRコードリーダーは有名なZXing(ゼブラクロッシング)と言うライブラリがあります。
このZxingがxamarinで使用できるようにしたZxing.Net.Mobileがあり、xamarinでも容易にQRコードを扱えます。

・・・と書きつつも私は容易に扱えませんでした。
Qiitaの記事を読むとNuGetからZxing.Net.Mobileを取得して容易に実行できるように書かれていたのですが・・・。

私が試した手順は以下です。

1. Blank Xaml App (Xamarin.Forms Portable)を選択する
001a.png


2. インストールされているSDKに適したバージョンを選択する
002a.png


3. 各プロジェクトのプロパティを開きターゲットを変更する
プロパティを開き、変更を選択する
003b.png


以下のようにターゲットを変更する
003.png


4. Zxing.MobileをNuGetで追加する
004a.png


5. TestZXingMobile.UWPのCapabilityにWebCameraを追加する
004b.png


6. TestZXingMobile(移植可能)のApp.xaml.csを編集しMainPageをNavigationPageに変更する
public App()
{
      InitializeComponent();

      //MainPage = new TestZXingMobile.MainPage();
      MainPage = new NavigationPage(new TestZXingMobile.MainPage());
}
7. TestZXingMobile(移植可能)のMainPageにボタンを追加します。
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:TestZXingMobile"
             x:Class="TestZXingMobile.MainPage">
  <!-- ここを追加 -->
  <Button Text="QRコードをスキャンする"
           VerticalOptions="Center"
           HorizontalOptions="Center" 
           Clicked="ScanButtonClicked"/>

</ContentPage>
MainPage.xaml.cs
//先頭に参照を追加
using ZXing.Net.Mobile.Forms;
//ボタンの応答処理を追加
async void ScanButtonClicked(object sender, EventArgs s)
{
    // スキャナページの設定
    var scanPage = new ZXingScannerPage()
    {
        DefaultOverlayTopText = "バーコードを読み取ります",
        DefaultOverlayBottomText = "",
    };
    // スキャナページを表示
    await Navigation.PushAsync(scanPage);

    // データが取れると発火
    scanPage.OnScanResult += (result) =>
    {
        // スキャン停止
        scanPage.IsScanning = false;

        // PopAsyncで元のページに戻り、結果をダイアログで表示
        Device.BeginInvokeOnMainThread(async () =>
        {
            await Navigation.PopAsync();
            await DisplayAlert("スキャン完了", result.Text, "OK");
        });
    };
}
8.TestZXingMobile.UWPのMainPage.xaml.csにZxing.Mobileの初期化コードを記載します。
public MainPage()
{
    this.InitializeComponent();
    //初期化処理を追加
    ZXing.Net.Mobile.Forms.WindowsUniversal.ZXingScannerViewRenderer.Init();

    LoadApplication(new QRReader.App());
}
9. TestZXingMobile.UWPのビルドと配置を行う。
005.png

006.png


10. 配置されたアプリを実行する
007a.png


起動後、「QRコードをスキャンする」ボタンをタップすると、以下の例外が発生しクラッシュします。
例外がスローされました: 'System.IO.FileLoadException' (mscorlib.ni.dll の中)
・・・と、NuGetから取得したZxing.Net.Mobileで動作を確認できませんでした。
しかし、GitHubから入手したライブラリをコンパイルし組み込んだ場合は動作可能でした。
どうやら、UWPアプリを作成した時のSDKのバージョンに依存してしまうなどの問題があるようです。

2016/04/26(火)[WPF]PdfiumViewerを使ったPDFの表示

PDFファイルを読み込みを行う場合、Windows Storeアプリ用のAPI PdfDocumentは用意されています。
しかし、WPF用のAPIは残念ながら用意されていません。

Webを検索した結果、完全マネージドで書かれているPDFの表示用ライブラリは見つかりませんでした。Win32 DLLをラッピングしている表示用ライブラリでライセンス条件が緩い(Apache License Ver.2.0)なのが、PdfiumViewerです。

本記事では、PdfiumViewerを使用してWPFでPDFを標示する方法を記載します。


1. NuGetを使用してSharpCompressをプロジェクトに追加する。

(1)メニューの[ツール]-[NuGetパッケージマネージャー]-[ソリューションのNuGetパッケージの管理]を選択します。
(2)[参照]を選択し、[PdfiumViewer]を検索します。
(3)使用するプロジェクトにチェックを入れ、インストールを選択します。

PdfiumViewer_001.png

2. 追加されたpdfium.dllをx86/x64ともにプロパティを開き、「新しい場合はコピーする」に変更します・

PdfiumViewer_002.png

3 使用するソースコードに名前空間の参照を追加します。

using PdfiumViewer;

4 PDFファイルを開く処理を追加します。

PdfDocument pdfDoc = PdfDocument.Load(fileName);

5 指定ページをレンダリングします。

System.Drawing.Image image = pdfDoc.Render(page, 96, 96, false);

6 WPFのImageに設定できるようにBitmapSourceに変換します。

BitmapSource bmp = BitmapHelper.ToBitmapSource(image);
※BitmapHelper.ToBitmapSourceはPdfiumViewerのサンプルコードに付属のメソッドです。

7 取得したBitmapSourceを任意のImageに設定します。

ダウンロードは以下からできます。

ダウンロード

2016/04/10(日)[C#]圧縮ファイルの展開方法(SharpCompress)

C#でZIP/RARファイルを圧縮、展開できるライブラリにSharpCompressがあります。
SharpCompressはGithubで開発されておりNuGet経由でも使用することができます。ライセンスもMITライセンスとなっており使用しやすいと思われます。

オフィシャルサイトは以下となります。
https://github.com/adamhathcock/sharpcompress

SharpCompressが現時点で対応している圧縮形式は以下となります。

形式圧縮展開
Rar×
Zip
Tar
GZip
7Zip×

この記事はSharpCompressを使用して圧縮ファイルを展開する方法を記載します。

1. NuGetを使用してSharpCompressをプロジェクトに追加する。

(1)メニューの[ツール]-[NuGetパッケージマネージャー]-[ソリューションのNuGetパッケージの管理]を選択します。

001.jpg

(2)[参照]を選択し、[SharpCompress]を検索します。

002.jpg

(3)使用するプロジェクトにチェックを入れ、インストールを選択します。

003.jpg

2. SharpCompressの名前空間をソースコードに記載します。

using SharpCompress.Archive;

3. ファイルの解答処理を記載します。

            //SharpCompressのエンコーディングを設定する(日本語の文字化け対策)
            SharpCompress.Common.ArchiveEncoding.Default = System.Text.Encoding.Default;

            //アーカイブを開く
            IArchive archive = ArchiveFactory.Open(args[0]);

            //アーカイブ内のファイルを列挙する
            foreach (var entry in archive.Entries)
            {
                Console.WriteLine(entry.Key);

                //ファイルに出力する
                entry.WriteToDirectory(".\\");
            }

            //解放する
            archive.Dispose();
※この例ではディレクトリは作成されません。

4. サンプルコード

以下からダウンロードしてください。

サンプルコードは以下からダウンロードしてください。
 ダウンロード


2016/03/13(日)[C#]C#で使えるテンプレートエンジン

プログラム中でHTMLのテンプレート処理を行う必要があり、
テンプレートライブラリを探しました。

結果、C#(.NET Framework)で使える以下のライブラリが見つかりました。

RazorEngine

概要

RazorEngineは、その名前の通りASP.NET MVCのビューエンジンで利用されている
Razor (System.Web.Razor) のエンジン部分を汎用的にしたライブラリです。
汎用的なテンプレートエンジンとして利用できます。

内部で、Razor本体を利用しているのでシンタックスは同じものが利用できます。

公式サイト

https://github.com/Antaris/RazorEngine

解説記事

http://devlights.hatenablog.com/entry/20121030/p1

StringTemplate

概要

StringTemplateは、オリジナルはJavaによるものですが、.NET版がStringTemplate.NETとして公開されています。

公式サイト

ttp://www.stringtemplate.org/

解説記事

テンプレート・エンジン「StringTemplate.NET」を使う (1/2)
http://www.atmarkit.co.jp/ait/articles/0902/20/news140.html

NVelocity

概要

NVelocityはVelocity(Java)を.NET Framework環境に移植したもらしいです。昔はSourceForgeで公開されていたようですが、現在はMonorailプロジェクトの一環として公開されているようです。

公式サイト

http://www.castleproject.org/projects/monorail/
MonoRail/MR2/NVelocity/にあります。
Velocity - VTL Reference Guide
Velocity テンプレート言語 (VTL)は以下に日本語訳があります。
http://www.jajakarta.org/velocity/velocity-1.3.1/docs-ja/vtl-reference-guide.html

解説記事

[ASP.NET MVC]NVelocityをビュー・エンジンとして利用するには?[3.5、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/969aspmvcvelocity1/aspmvcvelocity1.html
テンプレートエンジンNVelocityを活用してテキストを生成する
http://codezine.jp/article/detail/373
OK キャンセル 確認 その他