A certain engineer "COMPLEX"

開発メモ その106 compattelrunner.exeを停止する

Introduction


少し古いWindows10マシン上でHDDへのアクセスがいつまでたっても100%のままで不安を覚え、リソースモニターでチェックしたのが事の始まり。
いくつか暴れまわっているプロセスの中で目に留まったのが compattelrunner.exe。何ぞこれぇ?

What is compattelrunner.exe?


CompatTelRunner.exeを停止してWindows 10を軽くする方法
Windows 10を起動すると、1分近くHDDがガリガリ言ってることがあります。 高速なSSDでは影響ないか…

上記ページによれば、

カスタマーエクスペリエンス向上プログラム(マイクロソフトへの情報提供)に関するアプリケーションですが、これに同意していなくても強制的に起動し、起動時に怪しげな動作をします。

とのこと。
名称からすると Compatible Telemetry Runner (互換性テレメトリーランナー) って感じです。
やることが鬼畜です顧客思いですね、Microsoftさん。

だけど、HDDに強烈なボディブローを長時間与えるのはよろしくないので、停止させていただきます。

タスクスケジューラの起動

コントロールパネルからでもよいですが、Windows 10だとコントロールパネルへのアクセスが面倒なので、ファイル名を指定して実行よりTaskschd.mscを起動

compattelrunner.exeの起動タスクを停止

まず、左側のタスクスケジューラライブラリから Microsoft -> Windows -> Application Experience を選択。

続いて、右側のMicrosoft Compatibility Appraiser を選択してダブルクリック

操作タブに移動

compattelrunner.exeの開始を確認。
ダイアログを閉じ、Microsoft Compatibility Appraiserを右クリック、コンテキストメニューから無効を選択。

これで自動起動が止まります。

しかし、これでカスタマーエクスペリエンス向上につながるとは思えないんですけどね...

開発メモ その105 Hyper-VでDebian with Raspberry Pi Desktop を使う

Introduction


Raspberry Piを使ったデモシステムの構築を計画しており、見積書、発注まで来ているのですが、如何せんLinuxなので早めに調査をしておこうと思い、仮想環境上で実行環境を作ろうとしたのが始まり。
といっても会社はWindows7マシンでHyper-Vなぞ使えないし、Hyper-Vサーバーはありますがネットワークが別で、それがネックになり、泣く泣くVirtualBoxで環境を作りました。
でも自宅はHyper-V、細かいことは気にしない。

Get Started


ISOの入手

まずはOSイメージのダウンロード。公式サイトRASPBERRY PI DESKTOPからゲットします。

仮想マシンの用意

Hyper-Vマネージャーから仮想マシンを用意します。
今回は、Raspberry Pi 3に近しい性能にするため、

  • メモリ1GB
  • HDD16GB

に制限します。

インストール

仮想マシンンにインストールします。

これでインストールは完了です。
一度仮想マシンを停止して、ISOファイルを取り出します。そうしないと、インストール画面が再度表示されてしまいます。

起動

インストールが終わったので、起動してみます。

無事にデスクトップが表示されました。

.NETで自動テストを試してみる 第1回

Introduction


会社の海外現地法人にて、自動テストでコスト削減、みたいなことが話にあがり、こっちでもやらないとダメだよね、って話になりました。
その際に話題にあがったのがAppium
Seleniumと名前が少し似ているので、関係があると思ったら、まぁその通りで。
Seleniumは使ったことはなくて、Webアプリ用でしょ?デスクトップアプリに関係ない?と思ったら今は違っていて、Selenium(に互換のあるAPIを持つアプリ)がWebサーバーとして動作し、テスト対象アプリとテストを指示するクライアントを仲介することで、iOS、Android、VB(レガシーだよ!!)とか何でもござれのご様子。
RPA(Robotics Process Automation)の一種やないと思い始めまして、ちょっと興味が。

で、Selenium互換のAPIを持つのがAppium。そのAppiumを経由することでWindowsアプリを操作することもできます。

ちなみに、この話は、Windows 10が対象で、7や8では試せません。

ソースは下記になります

Get Started


Appiumを使うには下記の作業が必要。

      1. Windows Application Driverのインストール
      2. テストの記述・実行

Windows Application Driverのインストール

Windowsアプリを対象にするには、Windows Application Driver (WinAppDriver) が必要。
テスト対象Windowsアプリとテスト(を指示するアプリ)クライアントを仲介し、Windowsアプリの仕様や挙動を伝えるI/Fってことです。

まずは、こいつをインストールします。
下記からインストーラをダウンロードし、実行します。

Microsoft/WinAppDriver
WinAppDriver - Windows Application Driver

インストールは大したことないので割愛。
どうでもいいですが、Windows7でもインストールは出来ますが、最終的にテスト実行時に

となりますので無駄骨です。

テストの記述・実行

もうテストが書けます!!
Nugetでライブラリが配布されていますので、テストを記述したアプリを作成します。
基本は、

      Windows Application Driverの起動
      テストの記述・実行

です。
サンプルがネットに転がっているので少し改造させてもらいます。

Windows Application Driverを試してみました。
Build 2016のセッション「UI Test Automation for Browsers and Ap…

上の記事は電卓(ただしUWP製の)を操作します。
が、こっちは、ネイティブのGuidgen.exeを操作してみます。

最初に

で、nugetの参照を追加します。
次はソースです。

特に迷うポイントはありませんが、ボタンを探す際、ニーモニックがあると戸惑うくらいでしょう。
各コントロールの名前は、inspect.exeを使って調べることができます。

プログラムを実行すると、コンソールでWinAppDriver.exeが立ち上がり、Guidgen.exeが自動で操作されています。

注意して欲しいのは、マウスカーソルが奪われますので、作業するのは止めた方が良いです。

Source Code

https://github.com/takuya-takeuchi/Demo/tree/master/Appium1

開発メモ その104 260文字を超えるパスを有効にする 追試験

Introduction


以前、開発メモ その9 260文字を超えるパスを有効にするという記事を書いたのですが、どうもCreators Update以降、微妙に挙動が変わっているように見えます。

具体的には、レジストリを有効にし、app.configに設定を追記しても、長いパスが有効にならないのです。
検証は、

  • Hyper-V上に英語版のAniversary Update (Winver 1607)Creators Update (Winver 1703)を新規に構築
  • ループポリシーで設定を有効にし、かつレジストリに設定が正しく書き込まれていることを確認
  • .NET 4.6.2.でビルドし、かつapp.configを用意

それが下記の結果です。


Aniversary Update


Creators Update

同じサンプルを実行させたのに結果が違います。

何故でしょう?

Answer


対応策は、manifestを埋め込む、ということだけです。
埋め込むmanifestは

です。
下記はmanifestを埋め込んだ結果です。


Creators Update

しかし、manifestを埋め込む、ということ自体は以前からMSDNに書いてあったはずです。

上のページの途中の説明です。

A registry key allows you to enable or disable the new long path behavior. To enable long path behavior set the registry key at HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD). The key's value will be cached by the system (per process) after the first call to an affected Win32 file or directory function (list follows). The registry key will not be reloaded during the lifetime of the process. In order for all apps on the system to recognize the value of the key, a reboot might be required because some processes may have started before the key was set.

The registry key can also be controlled via Group Policy at Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths.

You can also enable the new long path behavior per app via the manifest:

要するに、

レジストリキーが長いパスの新しい扱いの有効/無効を許可します。長いパスの扱いを有効にするために、**HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)** にキーを設定します。キーの値は、影響のあるwin32のファイルまたはディレクトリ関数(後述のリスト)の最初の呼び出し後、システム(プロセス毎)によって、キャッシュされます。レジストリキーはプロセスの生存中は再読込されません。
システム上の全てのアプリケーションにキーの値を認識させるために、いくつかのプロセスは値が設定される前に起動されたがために、システムの再起動を要求されるかもしれません。

レジストリキーはグループポリシーのコンピューターの構成 -> 管理用テンプレート -> システム -> ファイルシステム -> Win32 の長いパスを有効にする によっても制御することが出来ます。

また、マニフェストによっても新しい長いパスの扱いを有効にすることが出来ます。

です。
本文のalsoの係りをみるに、レジストリキーの設定さえあればOKのはずです。
ぶっちゃけ理由がわかりません。

が、manifestを有効にすれば動作しました。

最終的な検証は下記の通り。

 ローカルグループポリシー有効ローカルグループポリシー無効
App.configあり/ManifestありApp.configなし/ManifestありApp.configあり/ManifestありApp.configなし/Manifestあり
.NET 4.6.2OKOKDirectoryNotFoundExceptionDirectoryNotFoundException

結局、Creators Updateから長いパスを扱うには、

  • グループポリシー (またはレジストリ) の設定を有効
  • manifestで長いパスを扱えるよう設定

両方を満たす必要があるようです。

開発メモ その103 Sony Neural Network LibrariesのC++ライブラリをビルドする

Introduction


そこまで面倒なことはないけど、自分メモ。

Answer


sony/nnabla
nnabla - Neural Network Libraries

ソースは上から入手。
手順はBuild C++ libraries on Windowsに書いてあるとおり。
C++のライブラリだけど、それを作るのにPythonが必要です。
動かすのにPythonがいるわけではないです。
(ただし、学習はPythonが必要で推論はC++だけOK)

  1. clone
  2. nnabla\build-tools\msvc\setup_cpp_utils_deps.bat を実行
  3. nnabla\build-tools\msvc\cmake_cpp_utils.bat を実行

です。
途中、Pythonでモジュールが足りない、って言われるときがあります。

上の場合は、mako.template が無いって文句言ってますので

みたいにインストールします。

エラーが無ければ、nnabla\build\bin\Release にlibも含めたライブラリが生成されます。