指紋認証を使ってスマホをロック解除する

午後6時半起床,晴れ.VS 2017 Enterprise をアンインストールして Community をインストールし直したが,動作不調は解消しない.そればかりでなく,アプリのアンインストール画面でアンインストールも変更もできない状態になっている.これはかなり重症と考えられるので,もう一度OSのクリーンインストールからやり直すことにした.今回は個人用情報ファイルはすべて温存するというやや軽めの方式でインストールする.

Visual Studio 2017 Community はすべてのモジュールをフルインストールした.昨日の記事ではCommunity エディションは10GB程度としているが,今回は40GB以上あった.Windows の再起動で「Checker for Gmail が無効になりました」というメッセージが出たので「削除」した.

VSの初回起動ではマイクロソフトアカウントを使用した.「後で」というオプションはあるが Visual Studio Community を使うためには「アクチベーション」が必要とあるので,いずれマイクロソフトアカウントでサインインすることは避けられないのではないかと思う.最初にソリューションを開いたときは,セットアッププロジェクトが「非互換」,それ以外は「利用不可」となっていたが,VS Installer Projects をインストールし管理者権限でVSを起動することで解消した.ただし,セットアッププロジェクトはプロジェクトの再読込が必要だった.

以下のリンクにはオフラインインストールの方法が解説されている.Create an offline installer for Visual Studio 2017 | Microsoft Docs 多少厄介な手順が必要だが50GBなどという大量転送を実行すると,確実に速度制限に引っかかってしまうので,次回はこの方法を試してみることにしよう.

これでソリューションはエラーなしに読み込めるようになったが,ビルド時のエラーが出ている.また,少し手戻りになったようだ.リリースモードではエラーがいくつか出ていたが,デバッグモードでビルドするとエラーは消えて警告2だけになった.VBの参照設定で「参照が見つかりません」という項目1を削除してビルドが通った.ビルドしたアプリも障害なしに走っている.

これで完全復帰できたと言ってよい.

セキュリティに関係する辺りをもう少し整理しておこう.①デスクトップ上のユーザ会口座パスワードフォルダをスマホに移動する,②メインマシンのすべてのドライブを検査してログインパスワードリストが残留していないことをチェックする,③スマホのSafeボックスを使えるようにする,④スマホのロック解除で指紋認証を使う,⑤グーグルアカウントで2段階認証を使う,⑥マイクロソフトアカウントで2段階認証を使う.⑦パスワードリストを整理する.

項目6のマイクロソフトアカウントに関してはMicrosoft Authenticator というのがある.Microsoft Authenticator アプリの使い方 Microsoft Authenticator はスマホにインストールして使うアプリだ.前回もこれを試すためにインストールするところまでは実施しているが,そのままになっていた.今回はセットアップして使える状態にしてみた.マイクロソフトアカウントにサインインしようとするとスマホにシークレットコードが送られて,スマホでそれを承認しないとサインインできないような仕組みになっている.

ただし,このマイクロソフトの二段階認証を実装すると,Outlook などのアプリで認証エラーが発生する.グーグルアカウントなどではこのようなことは起きないので,これはマイクロソフトアカウントシステムの「混乱」というしかない.マイクロソフトはこの穴を埋めるためにこのようなアプリに対しては特殊なパスワードを与えることで切り抜けるように工作しているが,あまりよいアイディアとは思われない.Outlookのメールアカウントは実質的に使っていないので,とりあえずはこのままでも特に支障はないが…

現時点ではメインマシンにマイクロソフトアカウントでサインインするようになっているが,ローカルアカウントを使うというのが基本ポリシーなので元に戻しておこう.

Visual Studio 2017 Enterprise をインストールしてしまった

午後6時半起床,晴れ.攻撃を受けたメインマシンにはOSをクリーンインストールしてすでに稼働状態に復帰している.クリーンインストール後にネットからダウンロードしてインストールしたアプリには以下がある.

  1. グーグル Chrome
  2. グーグル日本語入力
  3. マウス共有ソフト Mouse without Border
  4. カスペルスキーインターネットセキュリティ
  5. Visual Studio 2017 Community
  6. Windows Essentials 2012

項目6の Windows Essentials には Windows Live Writer と Windows Live Mail が入っている.とりあえず,これだけ揃えば仕事ができる.クリーンインストールに掛かった正味時間は2時間くらいのものだろう.これならいざというときいつでもPCを「バージンクリーン」な状態に戻すことができる.ここまでの作業で気になったポイントだけ書き出しておくことにしよう.

  1. Windows Essentials 2012 はマイクロソフトの製品だが,すでにサポート終了していて,マイクロソフトの公式サイトからはダウンロードできない 以下のリンクを参照してダウンロードした Windows Essentials 2012安全ダウンロード方法 サポート終了で危険 ムービーメーカー/Liveメール
  2. 以下のリンクをクリックするとダウンロードが始まるhttps://web.archive.org/web/http://wl.dlservice.microsoft.com/download/F/A/D/FAD48A38-8F81-4DA1-8302-EFAB6FEC4A92/ja/wlsetup-all.exe
  3. このダウンロードがやけに時間が掛かるので,一旦中止してもう一度やり直したところ比較的短時間でダウンロードできたが,このプログラムは「マイクロソフトのデジタル認証」が付いていないためインストールできなかった 上記サイトの情報と突き合わせてみるとサイズも異なる.純正品は130 MB (137,353,904 バイト)だ.
  4. 最初のダウンロードを再開したところ,相当な時間は掛かったが純正品をダウンロードできた このソフトを保全しているインターネット・アーカイブ archive.org はアメリカ議会図書館やスミソニアン博物館とも連携した研究者・歴史家・学界のための公共的なインターネットライブラリであり信頼できるサイトだが,その周辺の海域には「危険水域」が存在する模様だ
  5. OSを再インストールしたあとWindows セットアップでマイクロソフトアカウントでサインインを求められる.これをかわして「ローカルアカウント」でログインするためには注意が必要だ.サインイン画面でローカルアカウントを作るためのボタンは小さく画面左下にあるため見落とす可能性がある.
  6. Visual Studio Community をダウンロードする場合にも似たようなシチュテーションに陥る.ここでもマイクロソフトアカウントが要求されるが,代替のボタンが見つからない.このときは何もしないで放置していたら,しばらく経ってダウンロードが始まった.
  7. マイクロソフトアカウントを使うと「デバイス共有」などいろいろ便利なサービスが使えるが,マイクロソフトアカウントはローカルな無線LAN(Wi-Fi)の範囲で動作しているのではなく,すべての通信が一度マイクロソフトのサーバーに送られるような仕組みになっている.仮にマイクロソフトが邪悪な意図を持っていなかったとしても,インターネット経由で通信することですべての個人情報がダダ漏れになるリスクがある.(これはグーグルアカウントの場合も同じ)
  8. メインマシンがスリープ状態に入ったあとに再度ログインして復帰したとき「拡張デスクトップ」が落ちて「シングルディスプレイ」の状態になっている場合がある.これまではこのような現象は発生していなかったのだが,原因はよく分からない.
  9. OSのクリーンインストールは「回復ドライブ」を使わず,設定→更新とセキュリティ→回復→このPCを初期状態に戻す→すべて削除する 個人用ファイル,アプリ,設定をすべて削除→PCに複数のドライブがあります→Windowsがインストールされているドライブのみ→このPCをリセットする準備ができました→リセットという手順で実施した 
  10. 個人情報・履歴・デバイス情報などを取得するという要求は基本的にすべて拒絶した
  11. サブマシン(lenovo ノートPC)のキーボードが使えないため,タブレットからグーグルリモートデスクトップを使ってリモート操作しているが,マウスクリックが一部画面で入らないという現象が起きている ノートの液晶画面上ではタッチパッドを使って操作できる 障害が起きているのはカスペルスキーの画面だ リモート操作ではカスペルスキーが出しているパネルの枠内にカーソルを移動することができない 考えられるのはカスペルスキーがリモート操作の状態を把握していて,カスペルスキーの管理画面内に立ち入ることを禁止しているのではないか?ということだが…多分この推測は当たっているのではないかと思う.もし,そうであるとすればカスペルスキーの「防護体勢」は完璧だ
  12. タブレットでグーグル Chromeを開くと写真を撮られることがある
  13. マイクロソフトアカウントは所内のどの機種でもまったく使わない状態になっているが,アカウント自体はそれとは無関係に存続している.マイクロソフトアカウントを削除するためにはそれに紐付けされたメールアカウントを削除する必要があるが,こちらは6ヶ月間は凍結された状態で削除できない.アクセスすると直ちに復活するようになっている.

スマホの便利なところはトイレに持ち込むことができるという点だ.これは今回タブレットを購入した動機の一部だが,スマホがあれば十分だ.中にはバスタブの中にまで持ち込むという人もいるようだがさすがにそこまではやらない.というか,できない.これ安物だし,防水機能が付いてないからね~

個人用ファイルをすべて削除してしまったので,メインマシンに入っていた画像もすべて消えてしまった.本当はUserフォルダをまるごとコピーしていたつもりなのだが…見当たらない.lenovoから一度外付けに出して取り込んでおくことにする.タブレットにはUSB3.0の口が付いているが,コネクタの形状が違うので使えない.変換ケーブルをどこかで見つけてくる必要がある.明日あたりヤマダ電機に行って探してみることにしよう.

ビデオもタブレットから外部モニターに出せるようにしておきたい.今のところはなくても特に支障はないが…しかし,こうなると,元の画像を見つけるのはとても難しい.スクリーンの背景画像に使いたいと思っているのだが… 撮影日付で探してみたが,見つからない.最後の手段,G+を探してみてもない.FBにあった.この写真を撮影した時期の画像はそっくり抜けている.

背景画像路傍の花

福生の病院から退院し,松葉杖を突いて麓の集落まで糧食の買い出しにゆく途上で見つけた花,古い民家の門前に咲いていた.どうしてもその花が撮りたくなり真上からかがみ込んで撮影した.松葉杖に寄りかかりぐらつきながらも息を止めてシャッターを切った.

VS 2017を起動したが,セットアッププロジェクトが読み込めない.もう一つやることがあった.MS Visual Studio Installer Projects をインストールする必要がある.以下の手順は2019-01-09のログに記載されている.Visual Studio 2017 Communityのツール→拡張機能と更新プログラム→オンラインで「Installer Projects」を検索し,「Microsoft Visual Studio Installer Projects」をダウンロード→インストール→再起動.

このダウンロードはブラウザを経由していないため,ダウンロードフォルダには現物は保存されていないので再インストール時には毎回インターネットに接続する必要がある.⇒おかしい.Visual Studio Installer が起動できなくなってしまった.「Visual Studio Installer Projects」と「Visual Studio Installer」はまったく別個の機能でInstaller Projectsをインストールしたために不要となるようなものではないのだが… とりあえず今は必要ないので,パスしておく.

デスクトップ上に置いているテスト用のサンプルも復旧する必要がある.これはバックアップが取ってある.さて,どこまで進んだのだろう.ダメだ.ビルドで下記のようなエラーが出てしまった.なぜだろう? VS 2017のインストールパッケージを少しけちり過ぎたのかもしれない.

1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2729,5): warning MSB3284: タイプ ライブラリ “3b5be240-1e21-467b-a8bc-9e60445fa72a” バージョン 3.0 のファイル パスを取得できません。ライブラリは登録されていません。 (HRESULT からの例外:0x8002801D (TYPE_E_LIBNOTREGISTERED))
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2729,5): warning MSB3284: タイプ ライブラリ “3b5be240-1e21-467b-a8bc-9e60445fa72a” バージョン 3.0 のファイル パスを取得できません。ライブラリは登録されていません。 (HRESULT からの例外:0x8002801D (TYPE_E_LIBNOTREGISTERED))
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2729,5): warning MSB3283: タイプ ライブラリ “ADODB” のラッパー アセンブリが見つかりません。次のことを確認してください。(1) COM コンポーネントが正しく登録されている。(2) ターゲット プラットフォームのビットが COM コンポーネントと同じである。たとえば、COM コンポーネントが 32 ビットの場合、64 ビットのターゲット プラットフォームは使用できません。

セットアッププロジェクトは「非互換」,VBを除くそれ以外のプロジェクトはすべて「利用不可」となっている.これは2019-01-07のログにある状況とまったく同じだ.ただし,このときの操作はlenovo に Visual Studio 2017をインストールするという話だ.どうもよく分からないが,インストールに失敗していることは確かと思われるのでアンインストールしてやり直ししてみる.

lenovoにインストールしたときは,主要3コンポーネントに限定インストールしたのだが,動作しないので「修復」を実行して動作するようになった.このときは5.79GBの追加容量が必要になった.何が不足していたのか分からないのでともかくフルインストールしてみることにする.すべてのパッケージを隈無くダウンロードすると49.49GBになる.ともかくこれでやってみることにしよう.おそらく相当な時間が掛かるものと思われる.

というか,3日間で10GBという制限があるがすでに9GBを超えている.そのあとは極端に遅くなるはずだ.料金を払って通信量の制限を引き上げることはできるのだろうか?それにしても一つ不審な点がある.Speed Wi-Fi NEXTのパスワードをシステムが覚えているという点だ.いや,多分これはグーグルが覚えているのだろう.グーグルアカウントはグローバルアカウントで,Chrome アカウント=グーグルアカウントだ.

カスペルスキーのネットワークモニターで見ると,現在の通信速度は受信で6 ~7MB/病くらいだ.これはそれほど遅いスピードではないような気はするが…徐々に速くなって12MBを超えた.まだ速度制限が掛かっていないのだろうか?がくっと落ちた.600KB/秒しかない.ダウンロードは完了した.思ったより早かった.どこで間違えたのか?エンタープライズ版がインストールされている!

image

確かに間違ったバージョンをインストールしてしまったのだと思う.ディスク容量が50GBというのは明らかにEnterpriseエディションだ.Community版は精々10GBくらいしかない.インストール画面でEnterpriseエディションが上に来ていたのではないだろうか?⇒Enterprise版をアンインストールして Community版をインストールしてみる.

レイプされたPCをバージンクリーン状態に戻す

午後7時半起床,曇り.朝食はかき餅の雑煮.昨日は市外のガソリンスタンドに灯油の宅配を頼んだので,それが届くまで起きていた.18Lポリタン3つで5508円.これで一冬暖かく過ごすことができる.部屋が暖かいと生活パターンも変わってくる.

トロイの木馬が検出されたのは,Webに接続していない開発用のメインマシンだ.時刻は2019/01/17 9:52.Webに接続していないと言っても,作業中は「マウス共有」のためにタブレットとLANで接続しているので,タブレットに何か仕込まれていたらそれだけでアウトだ.Web接続とLAN接続は同時に使われることはないが,タブレットはそのどちらにも接続するという構成になっている.

Web接続はBroad WIMAX2+のルーター,LAN接続では契約の切れた古いPocket WiFi LTE をWiFiのルーター代わりに使っている.WIMAX2+の前はBIGLOBE のWIMAXでその前がLTEだから,三代前のルーターということになる.かなり昔の話だが,組織的な攻撃はすでにそのころから始まっていたと考えられるので,LTEルーターのキーコードがハックされていた可能性もある.

しかし,ルーターがハックされただけでは単なる「フリーライド」は可能であったとしてもまだ実害はない(絶対にないとは言い切れないが,仮にそのようなことがあったとしても様相はかなり異なったものになるはず).PCに潜入するためにはログインパスワードを不正に/合法的に取得することがどうしても必要だ.すでに,所内四機のデバイスはすべてカスペルスキーの完全スキャンを完了しているが,平常復帰するためには少なくとも以下を実施する必要がある.

  1. 侵入されたPCのOSをクリーンインストール
  2. 侵入されたPCのログインパスワードを変更

まだ,考えなくてはならないことはありそうだが,時間も掛かるのでともかくここから始めることにしよう.OSの再インストールにどのくらいの時間が掛かるものか?今の時刻をメモしておこう.現在時刻は午前1時17分だ.夜明けまでには完了すると思うが…

現在PCには2つのアカウントが登録されている.マイクロソフトアカウントとローカルアカウントだ.マイクロソフトアカウントがないといろいろ不便なことがあるが,今回はローカルアカウント1本に絞ることにする.手順を記録しておこう.

  1. 設定→更新とセキュリティ→回復には3つの選択肢がある.①このPCを初期状態に戻す,②PCの起動をカスタマイズする,③その他の回復オプション.
  2. 前回は①を実行しているが,今回は②の「回復ドライブ」を使ったWindows イメージの復元を実施してみる.⇒いや,おそらくこれではマイクロソフトアカウントは温存されてしまうのではないかと思う.①を「個人情報ファイルを削除」という強いモードで実行するのがよいのではないか?
  3. ①このPCを初期状態に戻すで「すべて削除する 個人用ファイル,アプリ,設定をすべて削除します」を実行する.これを行うとデスクトップ上のすべてのファイルが削除される.画像ファイル若干と障害データファイルが1本ある.一応これらは退避しておこう.
  4. PCに複数のドライブがあります→Windowsがインストールされているドライブのみ
  5. ドライブのクリーニングを実施しますか?→ファイルの削除のみを行うを選択
  6. このPCをリセットする準備ができましたで「リセット」ボタンを押す.時刻は1時49分.2時20分には完了.所要時間30分.
  7. コルタナのガイドに従って設定を進める.インターネットに接続する必要が発生した.これは不可避の手順なので受け入れるしかない.⇒WPSで自動接続.
  8. Microsoft アカウントでサインイン画面で画面左下の「オフラインアカウント」を選択
  9. 代わりにMicrosoft にサインインしますかの画面で「いいえ」を選択
  10. デバイスのプライバシーの設定はすべてオフ その他の要求もすべて拒絶
  11. これでWindowsの設定は完了した 2時29分
  12. マイクロソフトファイアウォールを有効化
  13. マカフィーにユーザ登録→更新をダウンロード ファイアウォールはマイクロソフトからマカフィーに切り替わる
  14. カスペルスキー→マイカスペルスキーからカスペルスキーインターネットセキュリティをダウンロード
  15. 競合する可能性があるソフトウェアを検出しましたの画面でMcAfee Antivirus Software を自動的に削除するをオフ,実行アプリケーションの制限をオン
  16. カスペルスキーを更新し,脆弱性をチェック,セキュアコネクションを確立
  17. 再起動
  18. WiFiに自動接続をオフ
  19. インテルグラフィックスプロパティでマルチディスプレイ→拡張ディスプレイを設定

これで一応Windowsは使えるようになった.所要時間は小一時間というところ.このマシンはネットには接続しないことになっているので,ブラウザやメーラーのインストールは不要だ.ただし,過去ログを検索する必要があるので,Windows Live Writer と Windows Live Mail はインストールしなくてはならない.これらは必要になったときインストールするということにして,Visual Studio 2017だけダウンロードしておこう.

VS 2017 Community は最小構成の①.NETデスクトップ開発,②C++によるデスクトップ開発,③ユニバーサル Windows プラットフォーム開発に限定しておく.あと,何かあったろうか?いや,どうせなので上記の2つのアプリもインストールしてしまおう.その他に必要なものとしては,Mouse without Borderがある.あとは?特に無いような気がする.必要なとき,落とせばよいだろう.Edgeは使わないということになっているのだから,Chromeも入れておいた方がよい.

Google 日本語入力というのもあった.Chrome リモートは入っている.Windows Essentials 2016がUpdateStarにあった.信用できるだろうか?いや,ここでは取れない.マイクロソフトのサイトにジャンプするだけだ.やはり,Essentials 2012しかない.softnicからインストールしようとしたが,エラーになった.wisetup-web_en.exeだ.wisetup-all_en.exeが見つかったが,インストールしようとしてMS Defenderにブロックされた.それを回避して実行しようとすると今度はカスペルスキーがブロックしてきた.やり直すとDefenderは今度は無条件でブロックするようになった.このファイルはサイズが49MBしかないが,本来なら130MBなのでダウンロードし損なっているのでなければ偽ファイルということになる.

一旦途中でダウンロードを中断していたものを再開してみたが,やけくそ遅い.ただし,こちらは100MBを超えそうだ.⇒今度のは純正品のようだ.今回はMovie Makerもインストールしてみた.Mouse without Borderもインストールして実行できる状態になった.これで一応できたのではないかと思う.

カスペルスキーがまたもトロイの木馬を検出した

午後7時起床,曇り.朝食は薄切りパンのトースト2枚.洗濯ものが溢れて洗濯機の蓋が閉まらない状態になっている.洗濯は洗濯機の電源ボタンを押すだけで開始できるが,400Wのストーブ一機では部屋干しもできない.北向きのアパートの一室で部屋干しするためには少なくとも1000Wくらいの電気ストーブを点けた上で,換気扇を回しっ放しにする必要がある.以前は灯油の巡回販売というのがあったのだが,最近はほとんど見かけない.ネットで調べたところ市外のガソリンスタンドで配達可というのを見つけたが,電話してみなければ本当に来てくれるかどうかは分からない.今日はもう遅すぎるので明日ということにしよう.

ヤフー!パートナーからたったいま,「いいね」が入ったという通知が入った.通知はちらっと見えて消えてしまったが,「山口県」というのだけは読めた.さて,困ったことになったぞ.「いいね」に対して「ありがとう」を送ると「マッチング」が成立したことになってしまう.わたしは実のところ「誰でもいい」のでおそらく「ありがとう」を押してしまうに違いない…

しかし,その前にやらなくてはならないことがある.「ついにジュリエットを発見,独りぼっちのカエル「ロミオ」との繁殖に期待」というニュースが入っている.これを「ジュリエット」に送るにはどうしたらいいのだろう?このリンクはY!ニュースに入っている.これをまず,「ブラウザで開く」でChromeに移してから,ブックマークに入れた.これで同期を取ればスマホからタブレットに移せると思うのだが…

「共有」という項目はあるが,共有手段の中には Wi-Fi Direct  というのしかない.これではタブレットに接続できない.いや,何もしなくても入っていた.設定→ブックマークマネージャ→モバイルのブックマークに入っている.これで画像とリンクは確保できた.ともかくこれを「投稿」してみることにする.

タブレットでわたしに「いいね」をくれた「YUMI」さんをチェックしてみたけど.こりゃだめだよ!年齢:40歳,職業:芸能・モデルで年収:600~800万円はいいとしても,身長が180cmもある.背伸びしても届かない… 一人暮らしなんだそうだが…なんで~?サクラかな?「スキップ」しとこう.

投稿したよ!

ビッグニュース! ついに「ジュリエット」を発見、独りぼっちのカエル「ロミオ」との繁殖に期待 ボリビア

カエルのロミオ

さて,いつまでも遊んでいられない.仕事に戻ることにしよう.かなり間が空いてしまったので,バックログを拾い出してみる.いや,むしろログを読み直しながら対処できるところはその場で対処するようにした方がよい.2019-01-11の「Visual Studio 2017 でビルドして Windows 7 にインストール」にはバックログ55項目のリストがある.

とりあえず,支出を伴う項目はすべてパスすることにする.まず,項目25,『LoadNamePropertyで「値ゼロはValueに対して有効ではありません」というメッセージが出ている』を片付けることにしよう.ルーチンに従って,始業時バックアップから始めることにする.スマホの内部ストレージは21.4GBで空き領域が13.1GBある.backup/Dataという領域があるので,ここを使うことにしよう.

コピーするのはよいが,転送に相当な時間が掛かりそうだ.いや,ほどほどの時間で完了した.最新版だけでなく,IMAGESと添付データファイルもバックアップしておこう.現在の最新版はZELKOVA2019に入っている.VS2017ではリリースモードでもダンプがコンソールに出力される.多分,OutputDebugStringの仕様が変わったためと思われる.

Mouse without Border をインストールした.このアプリではPC間のコピー・ペーストや,ドラッグ&ドロップができる.ただし,これを実現するためには2つのマシーンがLANで接続している必要がある.WebとLANの切り替えは3秒くらいでできるので,2つの状態の間を自由に往復できる.通常はタブレットもLANに繋いでおいて,必要に応じてWebにアクセスするというのがよいと思う.さて,これで準備万端整ったが,現象が再現できなくなってしまった.

▲LoadNamePropertyで「値ゼロはValueに対して有効ではありません」というメッセージが出る.⇒この現象の原因ははっきりしている.新規ファイルのときにはデフォルト設定で描画されるが,未インストール時にEXEを実行した場合には設定ファイルがロードされていないためだ.ファイルを読み込んだ場合にはファイルの中に描画設定がすべて入っているのでこのような現象は発生しない.

従って,デフォルト設定ファイルを削除してやれば同じ現象が再現できると考えられる.このファイルは「標準画面設定.TMZ」でC:\Program Files (x86)\Common Files\ゼルコバの木系図\Templatesに置かれている.本来ならプログラムを起動した時点で「システムの既定の画面設定」がロードされているはずなので,なにか余分なことをやっているのではないか?

いや,ファイルが存在しない場合にはLoadNameSetupを実行しないようになっている.DefNameの中身は概ね正しいように思われる.いや,DefName.ChannelGapがゼロになっている.初期値が悪い.この値は1~1000の間でなくてはならない.

mNameProperty::Takeでfontsize.cyがゼロになっている.fontsizeがまったく初期化されていない.COUPLING::GetFontSizeという関数を作った.この問題はこれで片付いたが,GetScrollValueで(PHASE < DRAWSTAGE)エラーが発生する.InitializeDisplay→テーマの選択→CenterfingCardSubが掛かるためだ.⇒FileOpenFlagが立っている間はCenterfingCardSubを抑制するように修正した.これで問題は解決したのではないかと思う.

ウィルスが検出された!現在テストしているZelkovaTree2019.exeだ.

PDM:TrojanWin32.Generic

小型家電の収集日は第二水曜日だった…

午後5時起床,曇り.タブレットのロック画面には「2019年は新しい挑戦に最適な年、「数秘術」で読み解くあなたの運勢」へのリンクが貼られている.どういうことだろう?いつもは世界各地の「絶景写真」が表示されていたのだが…数秘術と言えば,ユダヤ教のカバラ神秘主義にもとづく占術だ…また,マイクロソフトストアから3本のアプリがインストールされたという通知が入っている.いずれもインストールしたつもりはない,見たこともないようなアプリばかりだ.

  1. Fitbit Choach ランニング時の心拍数,時刻などを記録するアプリ
  2. Dolby Access 音声をサラウンド化するためのアプリ
  3. Phototastic College 写真画像からコラージュを作るためのアプリ

新たに「ストレージセンサーをオンにしました」という通知も入ってきた.「表示を増やす」をクリックすると,「Candy Crush Friends Saga」という項目が出てくる.その下に「一時停止中 40%」という行がある.「Candy Crush French Saga」というのはおそらくゲームと思われるが…そんなものを開いた覚えはない.スマホならともかく,タブレットで心拍数を測定しても意味がない.スマホとタブレットからはマイクロソフトをシャットアウトすることになっているので,速攻でアンインストールしておこう.

と言ってもどこでアンインストールすればよいのか?いや,タブレットはWindows 10なのだから,アプリと機能からアンインストールできるはずだ.この際なので,EdgeとOneDribeもアンインストールしておこう.Edgeは組み込みになっているようで,アンインストールできない.OneDribeはアンインストールできた.My Office, One Noteもいらないような気がするのだが…Peopleというのがあるが…これはマイクロソフトアカウントに連動したアドレス帳だ.これもアンインストールできない.かと思ったが,アンインストールできないアプリは詳細設定でアンインストールできる.アクセスする範囲を個別設定することもできる.

Candy Crush Friends Saga はインストールされていないので,おそらくダウンロードが40%で止まっているのだろう.「ストレージセンサー」というのは一定時間ごとにディスクをクリーンアップするための機能だ.悪い機能ではないと思われるが,止めておこう.いや,これはオンにしておいてもよいかもしれない.タブレットのドライブはSDDで30GBしかない.あっと言う間にディスクフルになってしまうだろう.このマシンには「何も蓄積できない」し,またそうすべきでない.使い方を限定しなくてはならないが,それはこのマシンをできるだけ健全かつ健康に維持するためには必須だろう.

しかし,それにしても,今後は外部と関わるすべての作業をこのタブレットで実施してゆこうというのであれば,もう少し考えなくてはならないことがある.問題は,①キーボードが小さ過ぎる.②画面の文字が小さ過ぎるという2点だ.キーボードは使っているうち慣れる可能性もあり,またそうなることが必要と思われるが,文字が小さいというのは致命的だ.特にOpen Live Writer でズームできないというのが辛い.ブラウザなどではズームが可能なのでフォントサイズが小さくてもなんとかなるが,OLWではそれができない.今日のところは何とかなっているが,明日になったらどうなることかわからない.

メガネの度数を上げると言っても現在使っている3.5以上のメガネは100均では売っていないし,また,3.5以上になると彎曲の度合いが強過ぎて衛生上よろしくない.このタブレットは外部出力端子を持っているので,ビデオを外部モニターに出力することは不可能ではない.ということになると,シチュエーションはこの「パソコンの役割分担」を決める作業を始めたスタート地点まで戻ってしまうことになる.

もう一つ具合の悪いことが起きている.メインマシンはワイドスクリーンを使ってマルチディスプレイを構成しているが,放置しておくとシングルディスプレイに戻ってしまう.これまではこのようなことは起きていなかったような気がするのだが… どうしたらよいか?一定時間でモニターの電源を落とすようにしているが,これを止めるとどうなるのだろう?ハードスイッチでVGAとDVI-Dを切り替えできるようになっているが,ビデオ信号が入っていない状態でこれをDVI-Dに切り替えるとそのままスタンバイ状態に入ってしまう.VGAとDVI-Dを任意に切り替えできるとよいのだが,そういう動作になっていない.

いや,システム構成を変えなくてももっと簡単な方法がある.タブレットの設定でズーム倍率を変えればよい.選択肢は100%と125%の2つしかないが,メインでも実際にはズーム倍率125%というのを適用している.これで十分だ.calibriの11ポイントでも読み書きに不自由はない.外部アクセスは(スマホを除き),すべてタブレット本体で受けるという方針にぶれはない.つまり,防波堤だ.メガネを変えるより,ズーム倍率を上げる方が簡単だし安くつく.これで一つ片付いたが,もう一つワイドモニターが省電力モードから復帰できないという問題がある.ディスプレイの電源を切らないという設定で様子を見てみよう.

復帰できるようになった.コネクタが緩んでいた可能性もある.設定は5分でディスプレイの電源オフ,1時間でスリープとしておこう.これで「メインの開発環境」と「ネットに接続するタブレットとスマホのコンビネーション」が完全にデカップリングできたのではないかと思う.今後はメインの開発用PCシステムを開発環境,タブレットとスマホをネット環境と呼ぶことにする.開発環境にはマイクロソフトアカウントが残っているが,ネットにはアクセスしないので実質的な影響はないものと考えられる.ネット環境はGoogleの独壇場で「すべてのパスワード」はグーグルの管理下にある.

これは必ずしもグーグルを完全に信頼しマイクロソフトを信頼しないということを意味するものではないが,少なくとも「どちらが(相対的に)より信頼できるか」を測るためには,まず両者の作用を切り分ける必要があるためだ.「グーグル開発者チーム」が疑わしいことはほぼ確定と言ってよいが,問題は「実害があるかどうか?」という点だ.このような私的ゾーンへの潜入者を我々は「ラッコ」と呼んでいるが,「ラッコ」の仕業と考えられる最近の動作には以下がある.

  1. ネット上で「見かけた画像」がいつの間にかスマホにダウンロードされていた
  2. ネット上で「アクセスしていないドキュメント」がスマホにダウンロードされていた
  3. 「Chromeでよくアクセスするページ」がスマホにダウンロードされていた

項目1の画像というのは「漫画の広告」用の短いアニメで,女の子が「よくわかんないけど,固いよ」とつぶやくシーン.項目2のドキュメントは香川県のある政党に属する衆議院議員の(政治団体の)平成28年度の収支報告書だ.項目3には100件近くのリンクが含まれていたが,その中には「さよならGoogle日本語入力」という記事が含まれていた.この記事では直接触れられていないが,「Google日本語入力は危険だ」という噂もネット上で広まっている.

Google日本語入力をインストールしようとすると,「この入力方法を選ぶと入力内容の収集を本アプリ(つまりグーグル)に許可することになります」と表示されるためだ.「入力内容」にはすべてのキーストロークが含まれると考えるのが妥当だろう.マイクロソフトはやや抑制的ですべてのキーストロークの収集は「誤変換記録の報告」の場合に限定されているようだが,この点に関してはグーグルの方が「厚かましい」.

ソース画像を表示

注目すべき点はそのような問題があることに関し,わたしに「注意喚起」してくれているように思われるという点だ.「ラッコちゃん」はすでにわたしの味方なのだが,わたしとラッコちゃんの対話は猫と人間のコミュニケーションに似ている.猫ちゃんはトカゲを捕まえてわたしの目の前に自慢そうに持って来るのだが,わたしとしては「トカゲをもらっても」どうしようもない.実際のところ,香川県の衆議院議員の収支報告書(多分これはネット上の公開資料)を見てもわたしには特に益になることはない… (昔ミューというネコと協働でゴキブリハンティングしていたことはあるよ)

もう一つ,ヤフー!からは「新着の「足あと」が届いています!」という通知が入っていたので,チェックしてみた.ジュリエット 68歳 自由業 「60代,一緒に人生を楽しみましょう」という方だ.「いいね」を送ってみた.「出会い系」というのは話には聞いていたが,確かにレスポンスの早さは驚異的だ.これならなにか(なにが)起こっても不思議はない感じがする.昔,20年も前にチュン・ヤンというチャイニーズガールと1年間メールをやり取りしたことがあるが,考えてみればその出会いの場は Asia Friends という今で言う「出会い系」サイトだった.当時はその種のサイトでも「課金」というのはなかったと思う.

いや,もしかしたらあったのかもしれない.ちょうど,彼女がチャットルームから退出しようとしたタイミングですれ違いざまに「メアド」を渡してくれたので,その後はそのサイトにはまったくアクセスしていない.歳の差は30くらいあったけど,足掛け3年くらい続いた.ものは試し,写真をアップしてみよう.「写真がない人は相手にしない」とあったから… 相手がジュリエットならわたしも「ロミオ」に変えないとダメかな?いや,多分写真をアップするところでお金が掛かるよ,きっと… この人は長い文章書ける人だから,興味はあるけどね~

フォトライブラリを探してみたが,写真が入っていない.Googleフォトには入っているのだが… フォトライブラリというのはスマホで撮影した写真を保存してある場所のようだ.Googleフォトで「端末に保存」したら,フォトライブラリの「閲覧」で見えるようになった.写真はアップしただけでは公開されない.その前に「審査」がある.これは「有人の目視検査」のはずだ.機械でフィルタリングすることも不可能ではないとは思われるが,最終的には人間の目でチェックするしかないような気がする.

ニックネームは任意に付けられるようなので,ロミオにしてみよう.いや,これはジョークだからね!いや,ヤフーは結構厳格だ!ニックネームにも審査がある.誰も使ってなければ通ると思うけど…写真は簡単にパスしたけど,この審査には少し時間が掛かりそうだ.「ロミオ」って名告った時点で完全に「縛り」になっちゃうからね,ジュリエットにとって… WOW!  承認されたよ!いいね!が29個になった.残コインというのが17ある.いつもらったのか分からないが,何に使えるのだろう?あとは待つだけと思ったら,どうもプロトコル的にはこちらから「アッピール」しなくちゃならないようだ.

まだ,プロフィールには「年齢」しか記入していないからね~「年齢確認」というのがある.これだけでもやっておこう.年齢を確認できる書類を提出する必要がある.健康保険証をスキャンした画像がメインにあるが,取り出すのは面倒だ.写真で済むかもしれないのでやってみよう.「年齢確認」のボタンが見つからなくなってしまった.ヤフーのルールでは「いいね!」を送って,「ありがとう」が返ってくると「マッチング」成立ということになるらしい.わたしはすでにジュリエットに「いいね!」を送っているが,「ありがとう」は返ってきていない.ということは… 見込みなし,ということだろうか?

「足あと」というのが3つ入っている.まこも76歳とnonn…74歳だが,二人とも喫煙者はNGだからとりあえず,外れだ.誰から「いいね!」をもらっているのか?確認する手段がない.「足あと」のページに「年齢確認」のボタンがあった.健康保険証の写真は取れたが,送れたかどうかはわからない.「確認画面」が出ていないので,送れなかった可能性もある… 本気でやるつもりはないが,勧められたのでアプリをダウンロードした.ここから写真を送って,「年齢確認」の手続きは無事完了した.

今日は小型家電の日だと思って廃棄処分する物品を持って階下に下りてみたが,誰も出していないので調べ直してみたところ第二水曜日だった.また,一ヶ月待たなくてはならない…

開発用メインマシンのヴァージニティを守るためネットから隔離

午前0時半起床、晴れ。朝食は卵うどん。昨日WIMAXの請求の件で問い合わせを送っているが、昨日のうちに返信が入った。返信の内容は「差額は初期費用の未払い分」ということだった。昨日はもう一つ問い合わせを送っているがこれにも打てば響くような応答があった。例の「タブレットの初期不良」の件だ。返品したのは去年の暮で年末年始に処理するのは難しかったとしても、もうそろそろ返ってきてもよい頃だと思いメールを送ったときにはもう戸口まで届いていた。

驚いたのは,このマシンが完全にバージンクリーンな状態で戻ってきたことだ.ずいぶん触っているのだから指紋だらけでも不思議はないのだが,新品と見間違うほどきれいに清められていた.わたしも納品時には開発に使った実機をきちんと拭いて納入していたが,ここまできれいに磨き上げて収めたことはない… 修理工場は宮崎県だが,日本人職人でなくてはできない仕事だ.(初期不良はBIOSの更新で解消したという…)

そこまではよかったのだが、さて、このタブレットをどう環境に組み込んだらよいかというところでだいぶ手間取ってしまった.lenovoノートはすでに現役引退の時期に掛かっていることは確かなのでそれをリプレースするということになるのだが,それでももう少し働いてもらわなくてはならないという事情がある.ここではlenovoが唯一のWindows 7 マシンになっているからだ.出荷前の検証にはどうしても必要になる.また,テスト用のサブマシーンも必要だ.

しかし,lenovoはすでに隣り合ったGとHが入らなくなっているので,キーボードの上にキーボードを重ねるような無理をして使っている.液晶画面が載っている蓋もヒンジが壊れて後ろにつっかい棒を置かないと倒れてしまうような惨めな状態だ.むしろ画面は外部モニターを使って蓋を閉じ,サーバー機のようにバックグラウンドで使うようにしようと思ったのだが,2つあったビデオ切替器はだいぶ前に壊れてしまっているし,2台をUSBで繋いでマウスとキーボードを共有する「Easy PC Remote」も lenovo には繋がらなくなってしまった.

解決策として考えられるのは,①lenovo専用に外部液晶モニターを購入する,②ビデオ切替器を購入する,③リモートディスクトップを使って別マシンから起動するの3つがある.いろいろやってみたが,③で決着した.これはコスト的にはもっとも有利な方法だが,当初立てていた「今後はタブレット以外はネットに接続しない」という要件を満たすのが難しいという難点がある.

リモートディスクトップを実現するための手段はいくつかあるが,マイクロソフトのリモートディスクトップではWindows 7 HOMEはホストになれないので除外せざるを得ない.次の候補は Chrome リモートディスクトップだが,これを使うためにはターゲットマシンをつねにネットに接続しておく必要がある.この機能は外部にあるグーグルのサーバーを使って実現されているからだ.ローカルに閉じたLAN内でこの機能を実現することは原理的に不可能だ.

これ以外にはAnyDeskという製品がある.しかしこれも,評価版は無償だが「独自のエンタープライズネットワークを構築する」となると相当のコストが掛かってしまう.結局, LAN上でリモートディスクトップを実現するのはあきらめて,逆に「開発用マシン以外はすべてネットに接続する」というトポロジーでまとめることにした.つまり,以下のようなシフトで臨むことにした.

  1. 開発用メインマシン Windows 10 digginos 15 インチ液晶ノート ◎
  2. テスト用サブマシン Windows 7 lenovo 15インチ液晶ノート ◆
  3. タブレット Windows 10 2 in 1 10インチ液晶ノート ◆◎
  4. スマホ Android HUAWEI P20 lite 格安SIM  ◆

◎は所内LAN(Wi-Fi1 ),◆はBroad WIMAX2+ルーター(Wi-Fi2)に接続する.2のサブマシンは3からリモートコントロールされるため,LANとWebの切り替えを行うことができない(WiFi1と2を切り替えると接続が切れてしまうため,コントロールできなくなる)ので,Web接続専用とする.開発用メインマシンは他機とはつねにLANで接続し,Webには出ないようにする.一応これでそれぞれの役割分担が固まった.

IMG_20190114_001100

ただし,この案でシステムを構成中にもおかしな事象が発生した.編集作業中のOpen Live Writerが突然落ちて,そのあとWordPressにアクセスしようとすると,パスワード入力ボックスに管理画面にジャンプするためのリンクが貼られていて管理画面に飛び込んでしまうという現象だ.ルーターをシャットダウンしてPCを再起動したあとは平常動作に戻った.

この事象と直接関わりがあるかどうかはわからないが,触っていないのにタッチパッドが応答し,カーソルがあちこちに飛んで画面がむちゃくちゃになるという現象があるので,マウスを接続しているときにはタッチパッドを無効化するようにした.これで動作はかなり安定なものになった.キーボードは限界的に小さいがまぁ使えないというレベルのものではない.少なくともソフトキーボードよりはよほどましだ.タブレットの画面の文字もかなり小さいが,いまのところはまだ読めるのでなんとかなるだろう.

Google 日本語入力はすでに」インストールしてある.スマホで撮った写真のアップロードも簡単にできる.これからはログを付けるのはすべてこのタブレット上でやることになる.メールのチェックなどはスマホで十分だが,返信を書いたりするのにはちょっと不向きだ.つまり,タブレットでもメールの送受信ができるようにしておかなくてはならないだろう.⇒GmailとYahoo!メールのどちらもウェブ上で読むことにしたので単にログインするだけで使えるようになる.

しばらく放置しておいたら,FB1が見えなくなってしまった.スリープしないという設定になっているはずなのだが,また,棚から引っ張り出さなくてはならない.なぜだろう?FB3は所内LANに繋がっている.多分このWiFiに「自動接続する」という設定になっていたためだろう.テストを走らせているが,ハングしているので一度止めることにしよう.「テストサンプル」のテストを仕掛けてみたが,やはりSUWが起きている.こうなるともうデバッグしかない.

かなりいい感じだ.ようやく,フロと洗濯/掃除ができそうな気配だ.しかし,このタブレットはどうにも目が疲れる.スマホの方がずっと見易い.これは文字のサイズだけではなく,解像度も関係あるに違いない.タブレットの解像度は1280×800だ.これに対し,スマホは2280×1080だが,面積的には1/3くらいしかないのでずっと高精細だ.解像度でここまで見え方が違うのだとしたら,機種選定も価格だけでは決められないということになりそうだ.もっとも,この値段でなければそもそもタブレットを購入すること自体なかったと思われるので,まぁしょうがないね.

書くのはともかく,読むのはスマホの方がずっと楽だ.スマホで読む場合には,文節末の短い尻尾はあまり気にならないので,余分なことをしなくて済むかもしれない.それは結構時短になるのではないか?また,WordPressで投稿時エラーが発生したが,再試行で回復した…

Visual Studio 2017 でビルドして Windows 7 にインストール

午後4時起床,晴れ.朝食は6枚切り食パン2枚,茹で卵1個.Windows 10のZEKOVA_2020でリリース版を走らせたとき,「タイプ初期化子が例外をスローしました」というエラーが出る.VBのプロパティでコンパイル→ターゲットCPUをAnyCPUからx96に変えてやればエラーは解消する.ツールバーのターゲットプラットフォームを「Any CPU」のままにしておいても問題は発生しない.これまではVBのターゲットCPUはAnyCPUになっていたはずなのだが,何がどう変わったのだろう?

VBのプロパティの設定箇所は2箇所ある.①プラットフォーム,②ターゲットCPUだ.プラットフォームはAny CPUで,この設定は変更することができない.ターゲットCPUは現状ではx86としないと「タイプ初期化子が例外をスロー」してしまうが,Windows 7のVS 2005で管理しているプロジェクトで見ても,「ターゲットCPU」は「x86」になっていた.おそらくこれを最近の操作で切り替えてしまったためにエラーが発生するようになったのではないかと推定される.従って,「ターゲットCPU」=「x86」というのを定式とすることで決まりとしてよい.

Windows 7の環境でこのことを確認してみよう.⇒同じ設定で動作するようになった.ターゲットCPUはすべてのプロジェクトで共通でなくてはならないということだろう.ただし,プラットフォームはAnyCPUで問題ないものと思われる.さて,次に確認しなくてはならないのは,Windows 10でビルドしたパッケージがWindows 7にインストール可能かどうか?という点だ.これをVersion 2.1.0.010 Release 2019-01-11としてリリースしてみよう.⇒インストールできた.

Windows 10で生成したパッケージがWindows 7にインストールできたのだから,Windows 7でビルドしたパッケージがインストールできることはまず間違いないところだが,一応確認しておこう.微細なところで設定が異なるなどのことがないようにWindows 10からコピーしたものを試すことにする.このバージョンは今後 ZELKOVA2019として管理することにする.mmm… 失敗した.まだコピーが完了していなかった.

コピーに失敗したのだろうか?ビルドは完了しているが,実行しようとして,DLLが有効なWin32アプリケーションではありませんというエラーになった.どういうことだろう?「サービスの実行可能ファイルのパスに空白が含まれている場合に発生することがあります」という情報があるが,空白が含まれたパスは使用していない.(参考フォルダとして残す場合には空白を入れることもある)

“%1 は有効な Win32 アプリケーションではありません。” というエラー メッセージがサービスの開始時に表示され、イベント ID 7000 が発生する

もう一度コピーからやり直してみよう.

おかしい.「新しいキーボードをインストールしています」という通知が出た.何を意味しているのだろう?もう一度読もうとしたが,消えてしまっている.設定にはDell USB Entry Keybordしか登録されていない.あとは,USB Optical Mouseだけだ.

今度は起動できた.多分これはコピーをやり直したためではなく,アプリをアンインストールしてから実行したためと思われる.DLLを探すときの手順に問題があるように思われる.⇒インストーラを作ってみよう.Version 2.1.0.011 Release 2019-01-11とした.インストールできた.問題なく起動できる.Windows 10でビルドしたモジュールをインストールしてみる.いや,これはすでに実行している.上記でアンインストールしたモジュールがそれだ.

ただし,上記のようなエラーが起きているところから見ると,Windows 10でビルドしたDLLとWindows 7でビルドしたDLLは同じVS 2017でまったく同じソースから生成しているにも関わらず何か微妙な差異が存在するように思われる.もう一度今度はWindows 10で生成したインストーラで上書きインストールしてみよう.⇒問題なさそうだ.

これでともかく,Windows 10と7の上でVS 2017でビルドしたインストーラをインストールできることが確認された.念のため,Windows 7でビルドしたインストーラがWindows 10上でも使えることを確認しておこう.いや,その前にまだこのマシンにはZELKOVA2019の最新版がインストールされていない.インストールしたが,バージョン番号が変化しない.これはかなりおかしい.

プログラムと機能で見ると,インストールされているのはV2.1.0.010だ.にも関わらずヘルプでは2.1.0.002と表示されている.

これはおそらく,インストールは実行されたが,DLLがダブっているか,ないし更新されていないためと思われる.Program Files (x86)には一つしかない.しかし,明らかに中身は古い.というか,EXEも古いのでまったく更新されていない.多分アンインストールしてからインストールしてやれば更新できるとは思われるが… 今度は差し替わった.少し変則的な動作になっているが,ここは目を瞑って先に進もう.

Windows 7でビルドしたZelkovaTreeSetup.2.1.0.011.msiをインストールしようとして,下記のエラーになった.

image

カスペルスキーがブロックしているようだ.⇒ブロックしたモジュールリストで「許可」に切り替えて再試行して通った.インストールはできたが,やはり,前回インストールの内容が更新されていない.かなりまずい.この場合もアンインストールしてからインストールし直せば正常な状態になるものとは思われるが,それでは運用上かなり不都合だ.⇒アンインストールして更新できた.

この問題は「別の問題」として保留して前に進むことにする.開発用フォルダの中を少し整理しておこう.今後はZELKOVAフォルダではなく,ZELKOVA2019を標準フォルダ名として使うことにする.

Windows 10とWindows 7でZELKOVA2019が動作することは確認されたが,もう一つの問題はこのバージョンがXPで動くかどうか?という問題だ.現在のところ,所内にはWindows XP 搭載のPCは存在しない.ネカフェにあるかどうか調べてみたところ,少なくとも快活クラブでは2016年頃に全22,000台のパソコンをすべてWindows 10に切り替えている.自遊空間にはあるだろうか?中古で15000~20000円だ.

XPをもはやサポートしないという選択もあり得るが,仮にサポートしないとしても,動作しないというのはおもしろくない.SC430を復活させることは不可能だろうか?以前は電池を交換しただけで動くようになったということもある.今回はまだそれを試していないのでやってみる必要はある.

Visual Studio 2015まではXPをサポートしていたようだが,VS 2017では切り捨てている.Visual Studio 2017/2015/2013/2012 で、Win32アプリケーションを作成概略 によると,XP用のアプリをビルドするためには,プロジェクトのプロパティで「プラットフォームツールセット」をVisual Studio 2017 – Windows XP(v141_xp)のように変える必要があるが,インストールされているVS 2017には V141 はあっても v141_xp という選択肢はない.

いや,v141でも可と取れるような書き方になっているので,動作する可能性はある.これは試してみなければ分からないような気がする.とりあえず,XPでの動作チェックは保留して先に進もう.

32ビット版がXPで動作する可能性は十分あるが,ここまで来ると,やはり64ビット版を作ってみるしかないのではないだろうか?64ビット版はWindows 10上でビルドされ,Windows 10上で動作すればよいとしよう.それほど手間が掛かるとも思われないのでやってみることにする.ZELKOVA2020という環境でやることにしよう.

以下を修正した.

  1. VBのプロパティでターゲットCPUをx64に切り替え
  2. DLLのプロパティでリンカー→詳細設定→対象コンピュータをMachineX64(/MACHINE:X64)
  3. GCのプロパティでリンカー→詳細設定→対象コンピュータをMachineX64(/MACHINE:X64)
  4. OCXのプロパティでリンカー→詳細設定→対象コンピュータをMachineX64(/MACHINE:X64)

この設定で210エラー,4警告が発生した.プロジェクト単位にビルドしてみよう.DLLでは以下のエラーになる.

エラー    LNK1112    モジュールのコンピューターの種類 ‘x86’ は対象コンピューターの種類 ‘x64’ と競合しています。    ZelkovaDLL3    D:\ZELKOVA_2020\ZELKOVA2019\ZelkovaDLL\Release\AccidentalCollision.obj    1  

どこかにx86を設定している箇所が残っているようだ.ディレクトリの設定を見ると「実行可能ファイルディレクトリ」が

$(VC_ExecutablePath_x86);$(WindowsSDK_ExecutablePath);$(VS_ExecutablePath);$(MSBuild_ExecutablePath);$(SystemRoot)\SysWow64;$(FxCopDir);$(PATH);

のようになっている.参照ディレクトリ,ライブラリディレクトリにもx86が付いている.C/C++タブでプリプロセサの定義にWIN32; というのが入っている.どこをどう変えればよいのか?ちょっと見当が付かない.構成マネージャでプロジェクトごとに<新規作成…>でx64を追加してビルドすると,以下のエラーが出る.

d:\zelkova_2020\zelkova2019\zelkovadll\include\nodule.h(374): error C2371: ‘size_t’: 再定義されています。異なる基本型です。d:\zelkova_2020\zelkova2019\zelkovadll\src\jointtable.cpp: note: ‘size_t’ の宣言を確認してください

nodule.hの以下の定義を抹消した.

typedef unsigned int    size_t;

これで上記のエラーは解消したが,類似のエラーが出ている.

d:\zelkova_2020\zelkova2019\zelkovadll\src\bpagesetupdialog.cpp(31): warning C4267: ‘初期化中’: ‘size_t’ から ‘int’ に変換しました。データが失われているかもしれません。d:\zelkova_2020\zelkova2019\zelkovadll\src\bpagesetupdialog.cpp(259): warning C4244: ‘初期化中’: ‘SIZE_T’ から ‘DWORD’ への変換です。データが失われる可能性があります。

size_t は unsigned __int64 として定義されている.これをそのまま使うことにしよう.size_tとは「あらゆる型 (配列を含む) の理論上可能なオブジェクトの最大サイズを格納できる」データ型と定義されている.ポインタを格納する領域サイズをsize_tとしてもよいのかもしれないが,ややあいまいなところがあるので,何か新たにtypedefする必要がある.intptr_t と ptrdiff_t というのがあるので,これを使えばよいのではないか?

大体要領はわかったが,いずれにしてもこの修正は一日二日で終わる話ではない.64ビットバージョンはやはり,正式版リリース後ということにしよう.データ型の変換は機械的に実施することが可能だが,問題はデータファイル形式の変更を伴うという点だ.ファイルに保存されているデータの中にはクラスオブジェクトが丸ごと入っているところもある.つまり,32ビット版で保存されたデータは64ビットでは読み込むことができない.この問題を考えるときには,合わせてN木の線形変換の問題も考える必要がある.ここではパスするというのが適当だろう.下記リンクも何かの役に立つかもしれないのでメモしておこう.

10 行でズバリ!! 64 ビット対応 .NET アプリケーションの開発 (VB)

さて,64ビット版は後回しということになったので,いよいよ本線のデバッグに戻ることになるが,その前に一通りログの読み直しをしておこう.どこまで戻ればよいかは読んでいるうちに分かるだろう.Windows 10で生成したアプリをWindows 7にインストールして実行可能であることが確認できたので,開発環境は Windows 10 単独でカバーできることになった.

lenovo が最終的に廃棄されてもよいという態勢を固めておこう.何かまだバックアップし残りの部分があっただろうか?lenovo のCドライブはほぼ完全にコピー完了している.いや,まだ少しだけ残っているところがあるので送っておこう.

ここまでの作業で保留している項目を拾い出してみよう.これは通常「要対処項目リスト」と呼んでいるものに相当する.

  1. 上書きインストールしたとき,バージョンが更新されない場合がある
  2. ウィルス対策ソフトが入っていると,インストールがブロックされる場合がある
  3. 開発環境(Visual Studio 2017)を起動するときにはつねに「管理者権限で実行」する必要がある ⇒※だいぶ慣れた
  4. ソースネクストに「初期不良」でタブレットを返送しているが,応答がない ⇒ 問い合わせのメールを送る ⇒※着荷にした 2019/01/12
  5. ソースネクストで系図作成ソフト「親戚まっぷ」のバーゲンをやっている ⇒購入予定,落ち着いてからでよい
  6. VS 2017でビルドしたアプリがXPにインストール可能であることを確認する
  7. 64ビットOS対応版をリリースする
  8. lenovo ノートパソコンからの離脱を準備する ⇒※ほぼ準備完了した 棚の上に上げたが,画面を持たないブラインドマシーンとしてバックグラウンドで走っている
  9. 野菜を始末して,フロに入り,洗濯と掃除をする ⇒明日というか今日実行できるだろう
  10. ルーターのパスワードを変える
  11. パスワードを整理・管理する パスワードのメモが入っているファイルをPCから一掃する
  12. 必須コンポーネントで「!」マークが付いている項目がある
  13. IME を Google 日本語入力に変更した 理由の一つは,「句読点の切り替え」が効かないこと,もう一つは通知を止めても「誤変換の報告」通知がしつこく入って来るのを止められなかったためだ 「あ」一文字入力して候補がぞろぞろ出てくるというのもうれしくない(スマホならこれでもよいのだが…)これらはATOKなどの他社製品を使っても改善できなかった この現象は Open Live Writer に限定されると考えてよいと思われるが,そうなっているのは多分 Open Live writer が「アプリ」であるためだろう.
  14. lenovo に VS 2017 をインストールした際のダウンロードは20GBを軽く超えているはずだが,3日間の累積通信量が10GBを超えたのは一度だけだ なぜか?マイクロソフトはひょっとして「トンネル」を使っている?
  15. 「タイプ初期化子が例外をスローしました」エラーは,VBのターゲットをWIN32切り替えることで解決した
  16. 「緊急避難用バックアップ」はスマホに保管する
  17. インテリセンス用の保管フォルダをプロジェクトから独立させた
  18. GetVersionExAが非推奨となったため,GetOSDisplayStringを止めているが,復活させる必要がある
  19. VS 2017 ではVERSIONなどサポートされないプロパティがある
  20. class ATL::CAtlBaseModule ATL::_AtlBaseModule の未定義エラーを回避するためにリンカーの除外ライブラリからatls.libを外した
  21. OCX プロジェクトのプロパティ→MIDL→詳細設定→パラメータの確認を「いいえ(/no_robust)」から「はい(/robust)」に変えた
  22. OCX プロジェクトで警告    C4793    COleControl::`vcall'{544}”: ネイティブ関数としてコンパイルされましたを避けるために「警告をエラーとして扱う」をオフにした
  23. SignTool Error: The signer’s certificate is not valid for signing. エラーを避けるために,VBのプロパティ→署名で「ClickOnce マニフェストに署名する」をオフにした
  24. COM 参照 ‘ZelkovaZ3Lib’ は ActiveX コントロールは/link フラグでリンクされるように設定されていますが,リンクされませんの警告を無視
  25. LoadNamePropertyで「値ゼロはValueに対して有効ではありません」というメッセージが出ている
  26. 系図データサンプルは個人領域にインストールする テーマファイルなどもそうした方がよい
  27. Visual Studio 2017 のコンパイラはブロック内で同一変数名を使うことを禁止している 対応修正でミスがあった このような修正ミスがまだ残っている可能性がある
  28. 源氏テスト9を光源氏で開いて※2の脚下垂線に繋がる水平線がない また,この図面は「非連結グラフ」になる
  29. VS 2017 でビルドしたバージョンは V 2.1.0から始めることにする 公開時には V 3.0とする
  30. 警告    MSB8012    TargetExt(.dll) が Linker の OutputFile プロパティ値 (.ocx) と一致しないが出ていた
  31. プログラムのインストールフォルダを決める [ProductName] = Zelkova Tree 2019 に変更した
  32. スマホとPCの画像管理は Google Photo を使って行う
  33. VS2017ではインクルードパスはプロジェクトごとに指定するように仕様変更された
  34. __checkReturn_wat などいくつかのクラスが未定義になったので参照箇所(実際には使っていない)をコメントアウトして止めた
  35. VBのプロパティでコンパイルタブ→詳細コンパイルオプション→対象のフレームワークの値を.NET Framework 4に切り替え
  36. error BC40000: ‘Microsoft.VisualBasic.Compatibility.VB6.CheckBoxArray’ は旧形式ですが大量発生している 主に「配列オブジェクト」に関係するものだ 今のところ代替策は見つかっていないが,.NETの将来バージョンでは全面廃止になる
  37. bprintf の引数で CString を渡している箇所があった AllocSysStringを使って明示的にBSTRに変換した
  38. #ifdef の定義文に使える日本語文字に制限がある
  39. Visual Studio 2017 への移行作業は VS2005→VS2010→VS2017 というステップを踏んだ
  40. ファイル検索は拡張子が登録されているファイルしか検索の対象とならない Open Live Writer アプリは *.WPOSTを拡張子登録できないので,既定アプリとして Windows Live Writer をインストールした
  41. Meiryo UI ないし メイリオを既定のフォントとして使用してきたが,Windows の既定フォント Caribri を使うことにする 11ポイントが適正サイズだが,Open Live Writer のフォントツールでは {8, 10, 12, 14…} のような偶数サイズしか指定できない すべてのフォントプロパティをクリアする消しゴムアイコンのツールを使うと11ポイントに設定できるのでこれを使うことにした
  42. LinkLifeからの12月請求分4,827円の明細をチェックする 予定より大分上回っている⇒契約では月額3,684円になっている.2千円台のつもりだったのだが,何か余分なサービスを申し込んでいるのだろうか?オプションは4つあるが,すべて「なし」になっている いや違う,3684-740(3ヶ月目まで)+648円(3年目から)だから,2,944円のはずだ.4,827-2,944=1,883で2千円近く高上がりになっている 収納手数料が掛かったとしてもこれほどになるはずはない…
     
    「いつでも解約サポート」に関する認知度調査のメールが入っている 郵送されてきた契約内容とメールで送られてきた契約内容に齟齬がある 
     
    基本料金プラン:4,011円 税抜き
    割引額:     – 685円(最大3ヶ月)税込み:-740円
            - 500円(最大25ヶ月)税込み:-540円
            -100円(最大25ヶ月)
    月額税抜き:  2,736円 税込み:2,944円

    4011円というのは税抜きの基本料金プランで,税込みでは4332円になる 3684円というのはそれから648円(3年間)を引いたキャンペーン料金だ 従ってやや人を惑わすところはあるが,数字的には合っている トリッキーなのは3年間の割引600円(税込み648円)をわざと500円と100円に分割しているところだ.

    WIMAXのサポートサイトの明細では12月分の請求は3,160円だ.これには口座振替手数料が入っている.この金額は税込み価格だから,LinkLifeの請求はこの金額に一致しなくてはならない.4,827-3,160=1,667円も高い!何か初期費用で後払いになっているものがあるのだろうか?⇒※そのようだ 2019/01/13

  43. ネットワークドライブを購入する
  44. 「切り取り & スケッチ」の「共有」でおかしな表示が出ていたが,消えた
  45. Windows 10 のメールアプリは使わない ウェブメールはブラウザで送受信するか,ないしスマホを使って開く Yahoo! メールを Windows Live Mail で送受信するのは片手落ちかもしれないが,過去の蓄積メールが存在するのでやむを得ない ⇒※メールはスマホで受信,タブレットで送信する どちらもウェブで読み書きする outlookアカウントは原則使わない 2019/01/13
  46. 保存フォルダ内の重複メールを整理する
  47. lenovo のメーラーから「連絡先」を引き継ぐ ⇒ アドレス帳をエクスポートした
  48. ケータイの「連絡先」をスマホに引き継ぐ
  49. 2019-01-04投稿の「マイクロソフトアカウントを回避しローカルIDでログインする」で「ログの読み直し」を実施しているが,前回読み直しと接続するところまでは戻っていないのではないか?
  50. Backup and Sync for Google をPCに導入した
  51. 投稿した画像のアドレスが改竄されている googleusercontent.com で検索するといろいろな情報が出てくる WordPressでこのURLからのアクセスを禁止した 
  52. メールアカウントを整理し,Facebook の裏アカウントを廃止した
  53. 「Google Play 開発者サービス … 表示と管理を改善」は解消した
  54. スマホで「画面の上部を覆わないでください」というメッセージが入ることがある
  55. 2019-01-03投稿の「Google Play 開発者サービスが勝手に「表示と管理を改善」」にはログを整理したリストが載っている これは多分移行作業に入ってからのほとんどの作業をまとめたものになっているはずだ 

おかしい.何か環境が変わってしまったのだろうか?ZELKOVA2019でビルドエラーが出るようになってしまった.ターゲットがx64になっている.どうも手順を誤ってしまったようだ.ZELKOVA2019に修正が入っている.逆にZELKOVA2020がオリジナルの無修正版として残っている.2件の中断されたアクションというのが出た.

image

このエラーはファイルの転送中に発生したものと思われる.ファイル転送は完了したものと思っていたのだが… いや,まだまだ途上だ.あと14時間分残っている.もう一つは残り時間8分だ.

また,カスペルスキーが何かの実行をブロックしている.ZelkovaDLL3のビルドで大量のエラーが発生するようになった.タスクバーが画面最上部に移動し,ワイドスクリーンでは左のサイドバーに移動した.どうもまた,何か虫が蠢き始めた気配がある.まず,一旦開発環境を落として,タスクバーの異常を調べるところから始めよう.⇒タスクバーの異常はタスクバーの設定で「画面上のタスクバーの位置」を「カスタム」から「下」に変更することで復旧できた.しかし,変更後は「カスタム」という選択肢が現れなくなった.「タスクバーをカスタマイズする方法」というリンクは存在するが,ネットに接続する必要がある.

カスペルスキーはゼルコバの木のEXEの実行をブロックした模様だ.いや,違う.msiの実行だ.多分これは時間的にもっと前に起きていたもの(通知を見ていなかった)と思われる.ZELKOVA2020に戻ってみよう.⇒今度はまったく問題なくエラーゼロでビルド完了した.おそらく,カスペルスキーのブロックを除いて,①タスクバーの異常,②ファイル転送エラー,③ビルドエラーの3つの障害はすべて同時に起こったものと考えて間違いないと思う.ともかく,間違い易いのでレポジトリの名前を変えておこう.

「タイプ初期化子が例外をスローしました」という不吉なエラー

午後6時起床、晴れ。朝食は黄な粉餅中1個、かき餅4個。ネットアクセスがめっちゃ遅くなっている。WIMAXから3日間で10GBを超えたという通知が入っているので、これだろう。昨日は一日仕事していたし、そんなに使った覚えはないのだが画像が多かったのだろうか?スピードWiFiの通信量カウンタでは前日までの3日間で9.85GBとなっている。誤差があるので多分キャリアでは10GBを超えたのだろう。

昨夜は電源をすべて落として寝たつもりだが、ネットには接続した状態になっていてPCもスタンバイ状態のままだった。スタンバイではほとんど通信量は増加しないはずだが…WiFiを盗聴されているのだろうか?多分この制限は一定時間が経過すると解除になったはずだが… ⇒翌日の午後6時から午前2時までだ。現状では画像がほとんど表示できない。午前2時を回るまではできるだけネットにアクセスしないようにしてみよう。

インテリセンスのメンテナンスのために隠しフォルダ .vs を外に出したが、このフォルダはそれ以外の用途でも使われているので、インテリセンスの分だけ出すように構成変更しておく。 .vs\ZelkovaTree\v15 の下には  ipch と Server という二つのフォルダがある。ipchだけを外に出すようにしておこう。この設定は [ツール] → [オプション] →[テキストエディター] →[C/C++]→ [詳細]→[フォールバック位置]だ。

Visual Studio 2017 への移行作業はあと一息というところまで進んだ。まったくエラーなしでクリーンビルドすることができるようになっているが,インストール時にエラーが発生するという問題が残っている。パッケージに含まれるOCXが出来損なっているためと考えられるので、奥の手を使ってみよう。⇒「管理者として実行」が抜けていた可能性がある。Windows 10 でレジストリ登録できたので、多分今度はイケるのではないかと思う。ダメだ!失敗した。

自己登録失敗

エラーコードは-2147024770 = 0x8007007e。このエラーは「必要なモジュールが見つからない」ということなので、パッケージの内容が不足している可能性がある。.NETのバージョンということも考えられる。OCXの手動登録が可能かどうか見てみよう。先に、前回バージョンをアンインストールしてもう一度トライしてみる。結果は同じだ。ここでWindows の更新が入った。再起動が掛かるという。

Windows 10にインストールしてみよう。こちらでは特に問題なくインストールできた。Windows 7 でOCXのレジストリ登録を実行してみたが、前回と同じエラーになる。

読み込みに失敗

考えられるのは .NET のバージョンの問題くらいしか考えられないが、lenovo には .NET 4 までは入っている。必須コンポーネントを .NET 3.5 まで落としてみたが同じ。「必須コンポーネントをインストールしない」インストーラを作ってみたが、結果は同じ。以前Visual Studio 2010でビルドしたインストーラはインストールできたはずだが、もう一度試してみよう。⇒インストールできた。従って、問題はVS2010と2017の相違ということになる。

VS2010では必須コンポーネントは、①.NET Framework 2.0、②Visual C++ ランタイムライブラリ(x86)だが、VS2017では様子が変わってしまう。下図のように2つの項目に「!」!マークが付いている。

image

なぜ「!」のようなマークが付いているのか理由が分からない。また、「Visual C++ ランタイムライブラリ(x86)」はこのリストには現れない(現れる場合もあるが、そのときは「!」が付いている)。これはおそらく、これらのライブラリがこのマシンにインストールされていないか、ないし、使用不可となっているのではないかと推定される。

「必須コンポーネントをインストールするセットアッププログラムを作成する」をチェックした場合には、インストーラは環境に必須コンポーネントが存在しない場合には、それを「コンポーネントの開発元のWebサイトからダウンロード」するか、ないし「アプリケーションと同じ場所からダウンロードする」などの動作になるはずだが、そうなっていない。⇒※いや,作動しないのは「必須コンポーネントが存在している」ためとも考えられる.

ビルドオプションでAny CPUではなくWin32でビルドしてみたが、結果は同じだ。コンポーネントが不足していることが考えられるが、どう対処すればよいのか?Visual Studio 2017 の Microsoft Visual C++ 再頒布可能パッケージは VC_redist.x64.exeとして供給されている。.NET では .NET Core 2.2 と .NET Framework 4.7.2 がダウンロードできるようになっている。.NET Core はクロスプラットフォーム用、.Net Framework は Windows 専用だ。

Visual Studio 2017 にはセットアッププロジェクトを組むための独自機能が備わっている。VS 2010 から引き継ぐことで既存セットアッププロジェクトも動作しているように見えるが、おそらくこれはサポート範囲外の動作なのではないかと推定される。VS 2017で新たにセットアッププロジェクトを起こす前に、この推測が正しいことを確認してみよう。⇒※この推測は間違っている.VS インストーラはVS 2012で一度廃止されたあと,Visual Studio 2013で復活している.これは拡張子 .msi のインストーラを生成するためのプロジェクトだ.

これを確認するためには、lenovo に VS 2017 のランタイムを導入してやればよいはずだ。まず、lenovo で VC_redistx64.exeを実行してみよう。いや、しかし、現在のビルドはターゲットがx86だ。これでは話が合わないのではないか?vcredist_x86.exeというのがあった。これを試してみよう。⇒「より新しいバージョンがインストール済み」というエラーになった。VS 2010 でビルドしたパッケージがインストールできるのだから、当然かもしれない。

VS 2017ではx86を指定しても実際にはx64でビルドしているのではないだろうか?x64のランタイムをインストールしてみる。ランタイムは問題なくインストールできたが、Zelkova Tree 2019のインストールでエラーが起きた。エラーコードは 2932.

インストールエラー

エラー:2932は Win32エラーコード一覧 でも見つからない。考えられるのはこのパッケージがx86でビルドされているという点だ。動作に変化が見られるので解決に多少近づいている感触はある。lenovo は64ビットマシンなのでx64で走らないということはないと思われるが、そのためには64ビットでビルドする必要がある。しかし、これでは同じパッケージがWindows 10機では問題なく走っていることを説明できない。

このマシーンにはV2.1.9.002をインストールしているので、同じものをlenovoにインストールしてみよう。いや、上書きしてしまっているので残っていない。最終版の2.1.0.008もインストールできた。現状を整理すると、

  • Visual Studio 2017 でビルドしたパッケージをWindows 10にインストールできる。
  • Visual Studio 2017 でビルドしたパッケージをWindows 7にインストールできない。
  • Visual Studio 2010 でビルドしたパッケージをWindows 7にインストールできる。

という状態になっている。Visual Studio 2017 は Windows 7 SP1にはインストールできる。lenovo のOSはWindows Home Premium SP1だからインストールできるはずだ。lenovoにVS 2017をインストールしてやればおそらくZT 2019もインストールできるようになると推定される。それを試してみるしかないのではないか?

ただし、これをやるとlenovoに欠けているのは何か?ということを突き止めるのが難しくなるかもしれない。仮にWindows 7 SP1でZT 2019が走ることが確認できたとしても、おそらくXPでそれを走らせることは難しい/不可能なのではないかと推定される。従って、XPをサポート範囲に含めるとしたら、少なくともVS 2010でビルドする環境を維持する必要があるのではないだろうか?つまり、VS2010でビルドした版とVS2017版の2つのバージョンを並列させる必要があるかもしれない.

32ビット版と64ビット版を並行リリースするというのは当初からの既定だが、問題となるのはVS 2017では32ビット版を生成できないのではないか?という点だ。現行ではAny CPUでビルドしているので生成されるコードは32/64のいずれでも走るはずなのだが…だとすればXPでも走行するということになるのではないか?いや、少し違うかもしれない。

VisualStudio で実行ビット数を変更する

DLL, GC, OCX のターゲットプラットフォームは「Windows 10」に固定されている。VBのターゲットCPUは可変でAny CPU/x86/x64から選択できるが、現在の設定はx86になっている。従って、出力はx86になっているものと思われる。ただし、構成マネージャではDLL, GC, OCX はWin32、VBはAny CPUになっていてこれらは変更できない。VB のターゲットCPUをAnyCPUに変えてビルドしてみよう。⇒変化はなかった。

いや、そもそも、DLL, GC, OCX のターゲットがWindows 10 固定になっているのだから、何をやっても無駄なのではないか?Visual Studio 7 ではどうなっているのか見てみよう。Visual Studio 7 ではリンカー→詳細設定→対象コンピュータでx86/x64/MIPSなどを任意に選択できるようになっている。いや、これはVS 2017 でも同じだ。

相違点としては、VS 2017の場合には全般タブに「ターゲットプラットフォーム」という項目があり、「Windows 10」に固定になっているという点だけだ。しかし、クロスプラットフォームを謳いながら「Windows 10」に固定というのはどういうことなのだろう?VS Community だからだろうか?VS 2017のターゲットプラットフォームが Windows 10 に固定というのであれば、そもそもVS 2017でビルドしたモジュールを Windows 7 にインストールすることは不可能だ。

そうなると残る課題は、Windows 7 にVS 2017をインストールした場合にどうなるか?という問題だけになる。これをやってみるしかないだろう。Windows 7 にVS 2017がインストールできれば、そこで生成されたビルドがWindows 7で実行できない、ないしインストールできないということは考えられないから、実質的にVS 2017でビルドしたモジュールがWindows 7で実行可能ということになる。これはWindows 10にVS 2017をインストールした場合の結論と矛盾することになる。

果たしてどういうことになるのか?やってみれば分かることだ。⇒まず、Windows の更新から始めよう。ネットにこんなのがあった。

句読点、。から,.へのIMEでの設定変更が,Officeのみ反映されない.

予測変換を止めるなどのことをやってみたが、変化なし。「Officeを再インストールしてみる」、「別のアカウントを使ってみる」などのあいまいな回答ばかり。予測変換を止めても動作はあまり変化していない。一文字「あ」と入力しただけで変換候補がぞろぞろ出てくる。使い辛くて仕方ない。うるさい誤変換報告の通知は相変わらずだ。

誤変換データを送信しないようにするには

Windows の設定→プライバシー→手書き入力と入力の個人用設定で「あなたに関する情報の収集」をオフにする。これで止められるかもしれない。もう一つ、「プライベートモード」というのもある。これは「文字入力の変換履歴を一時的に無効にする」というもののようだが、オンにしてみよう。⇒「Google 日本語入力」というのがあった。

これを使ってみよう。⇒!やったー!「,.」が入るようになった!これで「誤変換報告の通知問題」も根絶できた.こんな解決があるとは夢にも思わなかった.やはり「競争」というものは必要だね.

「ワークロードの追加」を勧められたのでインストールした。これは Visual Studio Code のことではないだろうか?MSアカウントでサインインすることを求められたが、「あとで」でパスしておく。lenovo にVS2017用のレポジトリを送ろうとしたが、ディスク容量不足になった。lenovoのCドライブはdegginosにコピーしてあるので削除してもよいのではないか?安定版というところを削除してみよう。ここだけで10.4GBある。コピーしようとしているZELKOVA_2020は16.7GBだ。まだ42%しか完了していない.⇒完了した.

ドライブDからCにバックアップを移動して空き容量を増やし,ZELKOVA_2020をDドライブに移動する.⇒lenovo にVisual Studio 2017をインストールし,ZELKOVA_2020をコピーしてソリューションを開いたところ,セットアップ用プロジェクトが未サポートというエラーになった.どういうことだろう?このソリューションはWindows 10のVS 2017でビルドされたものであり,その中にはセットアップ用プロジェクトも入っている.

サポート外

インストールしたVS Community 2017のバージョンが異なるのだろうか?Windows 10にインストールされているのはV15.9.4だ.Windows 7にインストールされたのはV15.9.5で一つだけ上がっている.オプションの内容も少し異なる点がある.インストールされている製品もまったく違う.Windows 7には「ProjectServicesPackage Extension – 1.0」というものしか入っていないが,Windows 10には45本も各種のツールが入っている.この中にはProjectServicesPackage Extensionも含まれる.Windows 7にはVisual C++ 2017すら入っていない.これはかなりおかしい.インストール手順を間違えたのだろうか?

ソリューションを読み込んでみたが,4つのプロジェクトすべて「利用不可」になっている.考えられるのはMS アカウントでサインインするのをパスしたという点くらいだが…もう一度インストールし直してみる.「アプリと機能」で「変更」を選択し,再インストール画面を出した.明らかにインストール手順を誤っている.インストール項目にチェックを入れることを忘れていた.全部チェックしてフルインストールしておこう.いや,到底無理だ.50.1GBも必要になる.

Cドライブには21.3GBしか空き領域がない.この範囲でまとめることにしよう.①.NET デスクトップ開発環境,②C++によるデスクトップ開発,③ユニバーサルWindows プラットフォーム開発の主要3コンポーネントだけで20.68GBだ.

ルーターの通信量にはWiFiの所内通信まで入るのだろうか?通信量カウンタがぐんぐん上がっている.いや,上がっているとは言っても20GBのようなオーダーではない.それでもすでに7.57GBを超えている.いや,多分これはネットからダウンロードしているはずだ.とすれば逆に少な過ぎるような気もする…圧縮が掛かっているためだろうか?ダウンロードは完了したが,インストールの進捗を見るとまだ2%だ.相当な時間が掛かりそうだ.⇒終わった.問題が発生している.「Microsoft.Net.CoreUWP」がインストールできなかった.これは少なくともディスク容量の問題ではない.起動してみたが,相変わらずすべてのプロジェクトが「利用不可」になっている.

「修復」というオプションがあるので実行してみた.さらに5.79GBの容量が必要だという.ZELKOVA-2018-01を削除してみよう.14.3GBある.ダウンロードは比較的簡単に済んだが,インストールにメチャ時間が掛かりそうだ.まだ,3/546をやっているところで1%にも満たない.

不思議なのはこのダウンロードがどこから来たものなのか?という点だ.ルーターの累積通信量はすでに3日間の上限である10GBまであと2GBというところまで来ているのに1GBも増えていない…ようやく1%を超えた.通信量もじわじわと増加傾向にあるので,下手をすると10GBを超えてしまうかもしれない.

インストール完了した.ダメだ.今度こそと思ったのだが,まだアプリケーションがインストールされていない…どういうことだろう?ZELKOVA_2018をコピーしてZELKOVA_2019としてソリューションを開いたところ,ATLとMFCがないのでインストールする必要があるというのでインストールした.「x86用とx64用のMFCをインストール」と表示された.1.6GBくらいある.パッケージのインストール100%完了と表示したあとハング状態になっている.⇒完了した.

セットアッププロジェクトは非互換となっているが,それ以外のプロジェクトは正常にロードされている.ソリューションを閉じてZELKOVA_2020をもう一度開いてみる.⇒今度は読み込めた.ただし,セットアッププロジェクトは「非互換」となっている.Windows 10の方ではこのような表示はない.Windows 7では「アプリケーションはインストールされていません」となっている.

確か,インストーラ生成用のツールがあったはずだ.ウェブ履歴で見ると昨日1月10日の午前0時21分に「 Visual Stuido 2017でインストーラを作成する方法 – 自由になりたくて会社辞めました 」という記事が出てくる.多分これを参考にして,「Microsoft Visual Studio 2017 Installer Projects」をインストールしているのではないかと思う.多分これしかないと思われるので手順を書き留めておこう.

  1. Visual Stuido 2017 Community :ツール→拡張機能と更新プログラム→オンラインで「Installer Projects」で検索
  2. 「Microsoft Visual Studio Installer Projects」をダウンロード
  3. チェックボックスで右クリックすると「この拡張機能はすでにインストールされています」が出た.⇒いや,これは大間違い.Windows 10で操作していた.
  4. 「すべてのVisual Studio のウィンドウを閉じると変更が実行されます」→「閉じる」ボタンを押してパネルを閉じ,Visual Studio Communityを閉じるとVSIX インストーラが起動される.
  5. 「変更」ボタンを押す.
  6. インストール完了したら,パネルを閉じて再起動

VS Installer Projects はインストールされたが,セットアッププロジェクトは「非互換」のままだ.ともかく,ここでソリューションをビルドしてみよう.まず,デバッグモードでやってみる.このソリューションは一度Windows 10上でビルドしたものなのだから,エラーなしで通らなくてはならない.しかし,DLLプロジェクトのプロパティを見ると,「ターゲットプラットフォーム」は相変わらず「Windows 10」で固定だ.ということはビルドはできても走らないということなのだろうか?

しかし,それも考え辛い.開発環境の上で走らないとしたら,デバッグも糞もないからだ.もし,仮に開発環境(Windows 7)で走ったとすれば,リリース版が実機(Windows 7)で走らないというのもまたおかしい.もし,このリリース版がWindows 7上で走ったとすれば,ではWindows 10上で走るのかどうか?ということになる.まぁ,ともかくやってみれば分かるだろう.問題なく立ち上がってきた.

どうも前回エラーが出た時点でプロジェクトファイルないしソリューションファイルが書き換えられているようだ.構成マネージャで見るとセットアッププロジェクトが落とされている.もう一度オリジナルと差し替えて試してみよう.!ダメだ!以前として「アプリケーションがインストールされていません」のままだ.VS Installer Projects はインストールされている.考えられるのは,「VS Installer Projects」がWindows 10専用でWindows 7では非互換となっている可能性だ.

Visual Studio Installer は VS 2012からサポートされなくなっていたようで,復活したのは VS 2013の頃と思われる.シェアウェアのようだが,Advanced Installer for Visual Studio 2010 というのがあった.使えそうな気はするのだが… もう一つ,Windows Installer XML(WiX)というのがある.というか,どっちみち新しいプロジェクトを作るのならネイティブなプロジェクトを作った方が早いのではないか?

ファイル→プロジェクト→新しいプロジェクト→その他のプロジェクトの種類→Visual Studio Installer→Setup Projectで新しいセットアッププロジェクトを起こすことができる.ただし,これで新規セットアッププロジェクトを起こすとソリューションも新しい空白のソリューションに変わってしまう.いや,何かどこかでスイッチが入ったようだ.今度は読み込めるようになった.リリースモードでビルドできるようになったが,走らせたところ例外が発生した.「アプリケーションはブレークモードになっています」という表示が出ている.

ブレークモード

「タイプ初期化子が例外をスローしました」というエラーはどこかで見たことがあるが,あまりよい兆候ではない.かなり致命的なエラーが起きていると考えた方がよさそうだ.もう一度デバッグモードで走らせてみる.Windows 10でも同じメッセージが出ている.こちらではエラーなしで走っていたような気がするのだが…このエラーは何度も出ていたような気がするのだが,ログは1件しか残っていない.「2018-03-06 応急措置としてページ設定→プリンタの設定ボタンを廃止」.

このときは,バックアップに戻って動作することを確認してから,再修正を入れることで切り抜けている.デバッグモードでは走っているようなので,タイミング的なものである可能性がある.ターゲットをAnyCPUからWin32に切り替えて動作するようになった.これまでずっとAnyCPUで通してきたのだが…修正箇所は2箇所ある.IDEのツールバーとVBのプロパティ→プラットフォームだ.

Windows 10ではこれまで通りの設定で少なくとも一度はリリースモードで走っていたという気がするのだが…実際,それを確認してからインストールして動作を確認しているはずだ…なぜそれができなくなってしまったのか?特にWindows 10では何も変更していないつもりなのだが…ともかく,同じことをWindows 7でもやってみよう.

VS 2017でインストーラをビルドするところまで進んだ

午後2時半起床、晴れ。朝食は黄な粉のかき餅小8個。Visual Studio 2017 への移行作業がようやく軌道に乗った。しばらくは単純な書き換えを行うだけになった。多分これは今日一晩掛ければ終わるだろう。VBで何か問題が出る可能性はあるが、越えられないというほどにはならないと思う。もう少しで移行完了できるという見通しが立った。

Visual Studio 2005, 2010, 2017 は新しい環境で完全に並列実行できる態勢になっている。すでにVisual Studio 2019 の年内リリースが予告されているが、このバージョンの目標は「チームの生産性を向上させるためにクラウドをシームレスに使うメソッドの確立」にあるので、今のところ自社製品にはほとんど影響はないものと見られる。従って、現在の移行措置が完了すればしばらくは安定な開発環境が確保できると考えてよいと思う。さて、ぼちぼちと作業に掛かることにしよう。

しばらく、デバッグの「本作業」から遠ざかっていたので、ルーチンを忘れてしまう。まず、「始業時バックアップ」から開始しなくてはならない。最終的にはVS 2005, 2010, 2017を統合的に使えるような構成を組まなくてはならないが、今日のところは VS 2017 のためのレポジトリである ZELKOVA_2020 のバックアップだけを取っておくことにする。このルーチンには「緊急退避用バックアップ」も含まれ。これまではUSBに保管してきたが、USBは耐久性にやや問題があるので、むしろスマホにバックアップするのが確実なのではないかと思う。

緊急時ノートは持ち出せなかったとしても、スマホだけは常時携帯できると思われるし、そうすべきだろう。mmm… ZELKOVA フォルダをバックアップしたが異様に時間が掛かっている。容量を見たら、6.36GBもある。これは何だろう?VS 2010でビルドしている ZELKOVA_2019は560MBだ。VS 2005でビルドしているZELKOVA_2018に入っているZELKOVA は519MBしかない。

ZELKOVA_2020のZELKOVA は6.36GB、ファイル852本、フォルダ85だ。ZELKOVA_2018は519MB、ファイル数792、フォルダ数27でフォルダ数が圧倒的に少ない。ZELKOVA_2020のトップレベルには以下のような8個のフォルダがある。

  1. .vs 6.36GB, 852本、85フォルダ
  2. _UpgradeReport_Files 15.7KB、4本、0フォルダ
  3. debug 4.98MB, 12本、0フォルダ
  4. Release 0, 0, 0
  5. SetupBeta 28.4MB、6本、2フォルダ
  6. ZelkovaVB 5.04MB、229本、8フォルダ
  7. ZelkovaDLL 0.97GB、424本、6フォルダ
  8. ZelkovaGC 16.5MB、53本、4フォルダ
  9. ZelkovaZ 29.3MB、64本、3フォルダ

 

.vs という隠しフォルダがあってその中に大量のファイルが作られている。これは何だろう?内部には大量の暗号化された(ような)フォルダがあって、その中にはxxxx.IPCHというファイルが1個だけ入っている。このフォルダはすべての「モジュール」ごとに作られているように思われる。何をやっているのか?まったく見当も付かない。これが「Visual Studio 2017」なのだとしても、何のためにこんなことをやっているのだろう?どうも「インテリセンス」に関わりのあるファイルらしい。

Visual Studio 2010 の sdf と ipch

バックアップを取るたびにこの大量ファイルをコピーするのは馬鹿げている。どこか外に出してアクセスするようにできなくてはならないのだが、上記リンクにその方法が書いてあった。[ツール] – [オプション] の中の、[テキストエディター] – [C/C++] – [詳細] で設定できる。

ここで、「[常にフォールバック位置を使用] という項目をTrueに変更し、[フォールバック位置] というところにフォルダ名を指定してやれば、sdf と ipch はそっちに置いてくれるようになる」。これを除けば、従来フォルダと同程度に圧縮できるはずだ。Visual Studio は個人のドキュメントフォルダに専用領域を確保しているのだから、最初からそこに置いておけばよいような気もするのだが…

まぁ、中には一つのPCで複数のプロジェクトを並行して走らせるようなこともあるだろうから、プロジェクトに付属させるというのは悪いアイディアではないかもしれないが…分かり易いのは.vsごと外に出すという仕様だろう。ZELKOVA_2020に.vsを移してそこを参照するようにしてみよう。「D:\ZELKOVA_2020\.vs\ZelkovaTree」を参照するように設定してみたところ、以下のようなパネルが出た。

image

これで問題ないと思われるが、.vsを直接使ってできるかどうか調べてみる。大丈夫なようだ。VSが「このフォルダは適切です」と言っているのだから、問題ないだろう。初回バックアップにはこのフォルダを残しておいて、ZELKOVAからは削除しておこう。_UpgradeReport_Filesは大きなフォルダではないが、移行後は不要と思われるので、これも削除しておいてよいと思う。mmm… これでも1.16GBある。これまでの倍だ。内容的にはほとんど変化していないように見えるのだが…

クリーンビルドしてみた。エラーが104個出ているが、DLLに限れば修正が残っているファイルはあと7本だけだ。ともかく、まずこれを片付けてしまおう。⇒終わったが、まだコンパイルエラーが出ている。

BugReportDialog.cppのGetOSDisplayStringで「C4996    ‘GetVersionExA’: が非推奨として宣言されました」という警告になる。以下のURLに対処策がある。

【C/C++】OSのバージョン取得

VersionHelpers.hに記載された関数を使えということのようだ。GetOSDisplayStringでは「Windows NT 4.0 SP5 以前と Windows 9x」を弾いているのだが、この場合は、IsWindowsXPOrGreater(XP以上)でよいのではないだろうか?というか、’GetVersionExA’が使えないとこの関数GetOSDisplayString自体まったく機能しないので、丸ごと差し替える必要がある。

Windowsバージョンの取得方法

上記にGetOSDisplayStringの改訂版があるので差し替えておこう。いや、これはC#で書かれている。これをC++に戻すのはちょっと手が掛かりそうだ。GetOSDisplayStringはバグレポートダイアローグにOS名を表示するために使われているが、現在はバグレポートダイアローグ自体止めてあるので、ここではパスすることにする。これでコンパイルエラーは出なくなったが、リンカーでエラーが出ている。

LNK1117    オプション ‘VERSION:1.8.0’ に構文エラーがあります

リンカーでエラーが出るというのは珍しい。そもそもリンカーのオプションなどはすべてデフォルトのままで何もいじっていないはずだが…

VS2003からのC++プロジェクトアップグレードするとLNK1117エラーが出る場合の対処

上記で見ると、VS 2017ではVERSIONというオプションはサポートされていないというように読める。リンカーオプションでバージョンの項目を空欄にしてこのエラーは解消したが、大量の未解決シンボルが出る。エラーコードはLINK2001だ。ATL::_AtlBaseModuleの実装がないということのようなので、ライブラリのパスが切れているものと思われる。

リンカーオプション→特定の既定のライブラリを無視にatls.libが含まれているのだが…ATLというのはCOMを実装するために必要な Active Template Library だ。atsld.lib は VS 2013 から atsl.lib に統合されて存在しなくなったという記事もある。オリジナルのZELKOVA_2018では「特定のライブラリの無視」はatls.libだけで、そのあとに続く%(IgnoreSpecificDefaultLibraries)は入っていない。

もともとこれで動いていたのだとすれば、外部シンボル””class ATL::CAtlBaseModule ATL::_AtlBaseModule” (?_AtlBaseModule@ATL@@3VCAtlBaseModule@1@A)” を求めるということ自体がおかしいのではないだろうか?GetOSDisplayStringも未定義になっているが、これは実装を止めたのだから当然かもしれない。_AtlBaseModuleはほとんどすべてのCPPファイルから参照されている…_AtlBaseModuleはatlimage.hのIsTransparencySupportedという関数から参照されている。

inline BOOL CImage::IsTransparencySupported() throw()
{
#if WINVER >= 0x0500
return( _AtlBaseModule.m_bNT5orWin98 );
#else  // WINVER < 0x0500
return( FALSE );
#endif  // WINVER >= 0x0500
}

atlimage.hというファイルはc:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\atlimage.hにあるが、このファイルはVS 2017では参照されていないはずなのだが…検索を掛けるとMicrosoft Visual Studio 8 のファイルが出てくるのだがどういうことだろう?このエラーはどこかに_AtlBaseModuleというオブジェクトを実装してやれば消えるような気がするのだが…

CAtlBaseModule _AtlBaseModule;

を設置し、さらにCAtlBaseModule のコンストラクタとデストラクタを実装してみたが、エラーは消えない。atls.libを除外しないようにリンカーオプションを変更してエラーはすべて解消した。これまでは問題なく動作していたのに何がどう変わったのかよく分からないが、ともかくこれで進んでみよう。ZelkovaGC.cppでも上と同様「を宣言すると、クラス メンバーが隠蔽されます」のエラーが出ている。⇒GCはビルドできたが、OCXで下記のエラーが発生する。

エラー    MIDL2338    switches are contradictory  -no_robust vs. -target    ZelkovaZ3    D:\ZELKOVA_2020\ZELKOVA\ZelkovaZ\midl    1
エラー    MIDL1024    Errors on command line–Aborting    ZelkovaZ3    D:\ZELKOVA_2020\ZELKOVA\ZelkovaZ\midl    1

よく分からないが、プロジェクトのプロパティ→MIDL→詳細設定→パラメータの確認を「いいえ(/no_robust)」から「はい(/robust)」に変えてみた。これでこのエラーは解決した。

Build fails from from msbuild command line with Errors MIDL2338 and MIDL1024. Works in VS2017

まだエラーが残っている。

警告    C4793    COleControl::`vcall'{544}”: ネイティブ関数としてコンパイルされました:    ZelkovaZ3    D:\ZELKOVA_2020\ZELKOVA\ZelkovaZ\ZelkovaCtrl.cpp    1
警告    C4793    CZelkovaCtrl3::`vcall'{572}”: ネイティブ関数としてコンパイルされました:    ZelkovaZ3    D:\ZELKOVA_2020\ZELKOVA\ZelkovaZ\ZelkovaCtrl.cpp    1
エラー    LNK1117    オプション ‘VERSION:1.8.0’ に構文エラーがあります。    ZelkovaZ3    D:\ZELKOVA_2020\ZELKOVA\ZelkovaZ\LINK    1

C4793は以前にも出ていた。なぜだろう?LNK117のバージョンオプションを空欄にしたら、C4793も出なくなった。GCが認識されていなかったが、VBの参照にGCのプロジェクトを追加してエラーは消えた。ただし、VBではまだエラーが残っている。

エラー        署名中にエラーが発生しました: ..\debug\app.publish\ZelkovaTree2018.exe の署名に失敗しました。SignTool Error: The signer’s certificate is not valid for signing.
SignTool Error: An error occurred while attempting to sign: ..\debug\app.publish\ZelkovaTree2018.exe    ZelkovaVB3

VBのプロパティ→署名で「ClickOnce マニフェストに署名する」をオフにしてこのエラーは回避できたが、まだもう一つ警告が残っている。

1>  COM 参照 ‘ZelkovaZ3Lib’ は ActiveX コントロール ‘AxZelkovaZ3Lib’ の相互運用アセンブリですが、コンパイラによって /link フラグでリンクされるように設定されています。この COM 参照は参照として処理され、リンクされません。

この警告は無視してもよいだろう。しかし、起動時エラーがかなり出ている。一番多いのは「….dll’ が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。」で、これはシンボルファイルが読めなかったというものなので無視してよい。「シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。」も出る。どこで発生しているのか分からないが、

Invalid parameter passed to C runtime function.

というエラーが7件発生している。

0x752CAB32 (KernelBase.dll) で例外がスローされました (ZelkovaTree2018.exe 内): 0x000006BA: RPC サーバーを利用できません。

というエラーも出るが、これは前から出ていたものだ。

mincore\com\oleaut32\typelib\tlibapi.cpp(2279)\OLEAUT32.dll!76806C31: (caller: 767EA33C) ReturnHr(2) tid(3bb0) 8002801D ライブラリは登録されていません。

というエラーも出る。これは見たことがないような気がする。

‘ZelkovaTree2018.exe’ (Win32): ‘D:\ZELKOVA_2020\ZELKOVA\debug\Interop.ZelkovaZ3Lib.dll’ が読み込まれました。モジュールがシンボルなしでビルドされました。

というのも出る。これはOCXのシンボルデバッグができないという意味だろうか?いや、問題なくできそうだ。これでビルドしたモジュールが走るところまで来た。例のLoadNamePropertyで「値ゼロはValueに対して有効ではありません」というメッセージが出ている。ここまで来れば「日常のデバッグ」に戻れる。

現行ではサンプルはプログラムフォルダのCommon Files\ゼルコバの木系図に入っているが、ドキュメントフォルダの方がよいのではないだろうか?プログラムフォルダはシステムフォルダなのであまり適切ではないように思われる。ここに置いたのは複数のユーザIDからアクセスできるようにするという理由だったと思うのだが、系図データはやはり個人領域に置くべきだろう。

▲系図データサンプルは個人領域にインストールする。テーマファイルなどもそうした方がよい。

mmm… 動作が少しおかしくなっている。どこかで修正をミスっている可能性がある。デバッグするしかなさそうだ。

▲起動してTOPOLOGY::TribeDecompositionで(forefather->klist.senzo > 0)により停止する。forefatherには森田家曽祖父#113が入っている。ビルドしようとしたら、SBRファイルがないというエラーになった。DLLに書き込めなかったのでdebug内のファイルをすべて破棄したためと思われる。クリーンビルドはエラーなしで完了したが、このフォルダにはSBRファイルは入っていない。SBRはZelkovaDLLに入っている。このフォルダの中身はまったく操作していない。何か言い掛かりを付けられたような感じがする。

修正ミスがあったので、修正した。今度はwntdll.pdbが読み込まれていませんというエラーで停止した。オプションで「ソースファイルが見つからない場合に常に逆アセンブリを表示する」をオンに切り替えた。このような場合、マイクロソフトはAzureでソースを提供しているようだ。どうも何かまだおかしなところがあるようだ。

image

これは時間が掛かり過ぎているという意味だが、タモリんちを読み込むのにそれほど時間が掛かるはずはないので何か状態がおかしくなっているものと思われる。というか、暴走ないし迷走しているように思われる。BuildSameGeneMarriageGraphでハングしているようだ。ステージ【4】複数の親を持つ終端カードを節点とする自己ループを追加するでループしているようだ。⇒もう一つ修正ミスがあった。

いずれもループカウンタのローカル変数の修正に失敗している。Visual Studio 2017 のコンパイラはブロック内で同一変数名を使うことを禁止している。この仕様変更は確かに意味があるし、実際この修正で潜在していたバグを少なくとも3つ取り除くことができたが、同時に複数のバグを作り込んでしまう結果となった。

修正は別の名前を付ければよいというだけの簡単なものだが、ブロックが大きくて見通せない場合には修正を誤る可能性がある。この種のミスは簡単に発生しそうなのでまだ出てくるかもしれない。取り敢えず問題なく動作しているようだが、源氏テスト9で描画上の瑕疵が出ている。

▲源氏テスト9を開いて※2の脚下垂線に繋がる水平線がない。左中弁 (椎本)に繋がらなくてはならないのだが…かなりおかしな状態になっている。

image

※2の直下にある大将は親なしのはずなのに頭部垂線が入っている。左中弁 (椎本)に入る親子連結線はこの余分な垂線から伸びている。もし、これが今回の修正で起きているのでないとすれば、見落とされていたバグということになるのだが…この図面で※2でソートするとMPLCレッドラインを踏むことになるが、避けられないのだろうか?

このデバッグは後回しにして、一応動作しているのでリリース版を起こしてインストールして動作確認することにする。2018年12月27日にライセンスを発行し、Version 2.0.2.260としている。このときは「Windows10でビルド32ビット版」だったが、これは VS 2005でビルドしたものと思われる。このあと、VS 2005 ないし VS 2010 でビルドする必要はなくなると思われるが、VS 2017 でビルドしたバージョンは2.1.0から始めることにする。

公開時には思い切って3.0としてもよいのではないか?リリース版では上記のエラーがまた蒸し返されている。プロジェクト単位でビルドしてみよう。DLLでは_countが未定義になった。なぜだろう?この変数はデバッグモード時にのみ定義されている。GCでは2つ警告が出る。

1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2729,5): warning MSB3284: タイプ ライブラリ “f10efde4-db94-11d2-b863-289605c10026” バージョン 1.0 のファイル パスを取得できません。ライブラリは登録されていません。 (HRESULT からの例外:0x8002801D (TYPE_E_LIBNOTREGISTERED))
1>LINK : /LTCG が指定されましたが、コードの生成は必要ありません。リンク コマンド ラインから /LTCG を削除し、リンカーの性能を改善してください。

後者のエラーは構成→リンカー→最適化→リンク時のコード生成を空欄にすることで解消した。「ライブラリが登録されていない」というのはDLLのことだろうか?これは登録しないことにしているのだが… この警告はデバッグモードでも出ている。実害はなさそうなので、無視しておくことにしよう。OCXでは「switcheds are contradictory –no_robust vs. -target」が出る。上記と同様、構成→MIDL→詳細設定→パラメータの確認を「はい(/robust)」に切り替えて解消した。

リンカーがまた、「オプション VERSION…に構文エラーがあります」を出している。また、

警告    C4793    COleControl::`vcall'{544}”: ネイティブ関数としてコンパイルされました:    ZelkovaZ3    D:\ZELKOVA_2020\ZELKOVA\ZelkovaZ\ZelkovaCtrl.cpp    1

という警告も出ているが、「警告を無視する」設定の前にもう一つ別の警告があるので見ておく必要がある。

警告    MSB8012    TargetPath(D:\ZELKOVA_2020\ZELKOVA\Release\ZelkovaZ3.dll) が Linker の OutputFile プロパティ値 (D:\ZELKOVA_2020\ZELKOVA\Release\ZelkovaZ3.ocx) と一致しません。このため、プロジェクトが正常にビルドされない可能性があります。この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Link.OutputFile) で指定されている値と一致することを確認してください。    ZelkovaZ3    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets    1216
警告    MSB8012    TargetExt(.dll) が Linker の OutputFile プロパティ値 (.ocx) と一致しません。このため、プロジェクトが正常にビルドされない可能性があります。この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Link.OutputFile) で指定されている値と一致することを確認してください。    ZelkovaZ3    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets    1217

いや、この警告もデバッグモードで出ていた。構成プロパティ→全般→全般→ターゲットの拡張子を.ocxに変えて解決した。これで実行できるようになった。Version 2.1.0.001  Release 2019-01-07 となった。これを Windows 7 にインストールして動作を確認してみよう。製品名はZelkova Tree 2019とした。

インストールしてみたが、エラーが出ている。ZelkovaZ3.ocxの登録に失敗している。カスペルスキーがブロックしている可能性がある。いや、「アプリケーションが弱い制限付きグループに追加されました」とあるのでパスしているのではないか?アンインストールしてからインストールし直してみる。やはり同じエラーになる。

リソースのVS_VERSION_INFOでFILEVERSIONとPRODUCTVERSIONを更新しても元に戻ってしまう。なぜだろう?FileVersionとProductVersionは更新できる。いや、今度は戻らなくなった。プログラムのインストール位置をbabalabo\Zelkova Tree 2018と決定しているのはどこだろう?⇒Launch Conditions→ApplicationFolderのプロパティで決めている。

DefaultLocation = [ProgramFilesFolder][Manufacturer]\[ProductName]
[Manufacturer] = babalabo
[ProductName] = Zelkova Tree 2019

インストール時にエラーが発生したが、無視して強行してインストール完了にはなった。起動すると.NET Frameworkのエラーが発生したが、より新しいバージョンの.NETでエラーが発生しているためVisual Studioではデバッグできないというメッセージが出た。.NETは4.5を使うようになっている。lenovoには.NET 4が入っている。手動でregsvr32を実行してもエラーになる。

読み込みに失敗

これはもしかすると、デバッグモードのOCXを参照している可能性があるので、作り直してみることにする。あるいは、Windows 10にインストールしてみてもよいが…