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

午後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にインストールしてみてもよいが…

warning C4793: COleControl::`vcall'{540}”: ネイティブ関数としてコンパイルされました

食後に椅子でひと眠りしている間にヘルプのダウンロードが完了していた。日付が変わっているので新しいエントリを起こすことにする。

IMG_20190107_092449_thumb[2]

ノートパソコン(lenovo)の写真をスマホで取ってPCに落としたが、うまく同期が取れない。「ダウンロード」で何とか取り出せたが…まぁ、これはあとで見ることにしよう。ヘルプを「?」で開いてみた。

各プロジェクトのディレクトリの一覧 (プロジェクト単位) を指定することも、ユーザー、プロジェクト構成、および対象プラットフォームごとの組み合わせ (ユーザー単位) を指定することもできます。
ユーザー単位のプロパティ シートは、コンピューター上の特定のユーザーのすべてのプロジェクトに影響を与えます。

プロジェクト単位にパスを設定するようになっているが、ユーザ単位でも設定できるようになっているようだ。いや、現実にはそれはできないのではないだろうか?「VC++ ディレクトリ」タブには何も入力することができない。また、仮に「ユーザ単位」にパスを指定できるようになっていたとしても、それでは不都合だ。必要なのは「solution単位」でパスが指定できることなのだから…

プロジェクトのプロパティのVC++ディレクトリ→インクルードディレクトリで開かれるパネルは VS 2017 の場合とまったく同じだ。ここに以下の3行を追加してビルドできた。

$(SolutionDir)ZelkovaDLL
$(SolutionDir)ZelkovaDLL\INCLUDE
$(VCInstallDir)VC\atlmfc\include

DLLの場合、以下の4つのエラーが出ている。

1>SRC\COMDEBUG.CPP(28): error C2146: 構文エラー : ‘;’ が、識別子 ‘errno_t’ の前に必要です。

1>SRC\COMDEBUG.CPP(28): error C4430: 型指定子がありません – int と仮定しました。メモ: C++ は int を既定値としてサポートしていません

1>SRC\COMDEBUG.CPP(28): warning C4273: ‘fopen_s’ : dll リンクが一貫していません。

1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(236) : ‘fopen_s’ の前の定義を確認してください

最初のエラーは「__checkReturn_wat」が定義されていないためだ。この名前はcrtdefs.hで定義されている。このヘッダファイルは以下のフォルダに入っている。

c:\program files (x86)\microsoft visual studio 8\vc\include\crtdefs.h

これをインクルードパスに追加してみよう。以下を追加してみたが、効かない。

$(VCInstallDir)VC\include

VS 2010 ではこの位置にこのファイルが存在していない可能性がある。いや、存在している。考えられるのは$(VCInstallDir)が「Microsoft Visual Studio 10.0」を指していない可能性だ。というのは、このファイルをダブルクリックで開こうとすると、VS 2005 かないし、VS 2017 で開こうとする動作になるからだ。つまり、VS 2017 がすでにインストールされているために誤動作しているのではないか?ということが考えられる。マクロを使わずに直接上のパスを記入してみよう。

ダメだ!通らない。なぜだろう?VS 2010 のcrtdefs.h には「__checkReturn_wat」が入っていない。COMDEBUG.CPPで以下の行をコメントアウトしてコンパイルできた。

_CRTIMP __checkReturn_wat errno_t __cdecl fopen_s(__deref_out_opt FILE ** _File, __in_z const char * _Filename, __in_z const char * _Mode);

「_get_amblksiz」と「_set_amblksiz」も未定義になる。これらもコメントアウトできた。これでDLLはビルドできた。GCでは’ExportClasses.h’が見つからないというエラーになる。これは以下のパスにある。

d:\ZELKOVA_2018\ZELKOVA\ZelkovaDLL\INCLUDE\ExportClasses.h

これはプロジェクトのインクルードパスに以下を追加して解決した。

$(SolutionDir)ZelkovaDLL\INCLUDE

OCXの場合も同じだ。OCXでは警告が2つ出ている。

warning MSB8012: TargetPath(D:\ZELKOVA_2019\ZELKOVA\Debug\ZelkovaZ3.dll) が Linker の OutputFile プロパティ値 (D:\ZELKOVA_2019\ZELKOVA\Debug\ZelkovaZ3.ocx) と一致しません。このため、プロジェクトが正常にビルドされない可能性があります。この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Link.OutputFile) で指定されている値と一致することを確認してください。

warning MSB8012: TargetExt(.dll) が Linker の OutputFile プロパティ値 (.ocx) と一致しません。このため、プロジェクトが正常にビルドされない可能性があります。この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Link.OutputFile) で指定されている値と一致することを確認してください。

実際には同じ内容なので警告は1つと見てよい。要は、「TargetPath と Linker の OutputFile」の値が異なるということのようだ。この違いは「DLL」と「OCX」の違いだ。リンカーの出力ファイルがDLLになっている。これをOCXに変えればよいのだろうか?この部分がDebugモードとReleaseモードでは異なるものになっている。Releaseモードでは

$(OutDir)$(TargetName)$(TargetExt)

のように書かれている。Debugモードでは

$(SolutionDir)\$(Configuration)\$(ProjectName).dll

だ。最後のdllを$(TargetExt)のように書き換えてみよう。いや、見るところを間違えた。この違いはOCXではなく、GCのプロパティだ。OCXでは出力ファイルはOCXになっている。構成プロパティ→全般→ターゲットの拡張子が「.dll」になっているので「.ocx」に変えてみよう。通った。レジストリ登録に失敗している。

regsvr32 /s “D:\ZELKOVA_2019\ZELKOVA\\Debug\ZelkovaZ3.ocx”

このコマンドをPowerShellで実行してみたところ、下記のエラーになった。

エラーコード:0x80040201

このエラーは管理者権限がない場合に発生するとある。今度は成功した。これは結局Visual Studio を起動する際に管理者権限で実行していないためだろう。⇒起動し直してDLLのエラーは出ないようになったが、VBでエラーが発生する。

vbc : error BC40057: プロジェクト レベルのインポート ‘ZelkovaBeta’ で指定された名前空間または型が、パブリック メンバーを含んでいないか、または見つかりません。名前空間または型が定義されていて、少なくとも 1 つのパブリック メンバーを含んでいることを確認してください。また、インポートされた要素名がエイリアスを使用していないことを確認してください。

VBの参照にdebug\ZelkovaZ3.ocxを追加しようとしたら、以下のようなパネルが出た。

image_thumb[2]

「はい」で閉じたのはよいが、「対象の.NET Framework」を変更しなくてはならない。VBの.NETは現行では2.0になっている。OCXで必要な.NETのバージョンが分からないので取り合えずこのまま進むことにする。「ツールボックスにアイテムの選択」を実行しようとして、以下のエラーになった。

image_thumb[5]

ツールボックスにOCXを追加してエラーが発生した。プロジェクトファイルが壊れたというので「修復」を選択した。追加したOCXはツールボックスから消えている。もう一度実行してみたが、同じ現象が起きる。つまり、OCXをVBフォームに貼り込むことができない。

かなりまずいことになってきた。OCXをフォームに貼り込むと、IDEではこのオブジェクトを描画するためにOCXを起動する。この際何かエラーが発生して異常終了しているものと思われる。ツールボックスから挿入で参照解決するというのは「奥の手」なのでそれができないとほとんどお手上げになってしまう。

Releaseモードで試してみることにする。どうもReleaseモードとDebugモードで個別にインクルードパスを切る必要があるようだ。かなり馬鹿げているという気がするのだが…馬鹿げているというよりは「ひどい話」だと思う。IDEが落ちているので、「管理者権限で実行」が外れているのではないか?以下のようなエラーが出ている。

2>D:\ZELKOVA_2019\ZELKOVA\ZelkovaZ\ZelkovaCtrl.cpp : warning C4793: COleControl::`vcall'{540}”:  ネイティブ関数としてコンパイルされました:
非 clrcall 仮想呼び出しサンクは、ネイティブとしてコンパイルする必要があります

この警告はデバッグモードでも出ているが、ビルドは完了している。リリースモードでは警告をエラーとみなす設定になっているため、ビルドは失敗に終わる。このエラーはCOleControlの仮想関数に関わるものなのでアプリからは調整できないので、プロジェクトのプロパティで「警告をエラーとして扱う」を「いいえ」に変えることにする。

VBのプロパティでコンパイルタブ→詳細コンパイルオプション→対象のフレームワークの値を.NET Framework 4に切り替えて名前空間の問題は解決したが、まだエラーが残っている。

D:\ZELKOVA_2019\ZELKOVA\ZekovaVB\CardBox.Designer.vb(97) : error BC40000: ‘Microsoft.VisualBasic.Compatibility.VB6.CheckBoxArray’ は旧形式です: ‘Microsoft.VisualBasic.Compatibility.* classes are obsolete and supported within 32 bit processes only. http://go.microsoft.com/fwlink/?linkid=160862′

のようなエラーが、以下の要素で発生している。項目11以下は関数。

  1. CheckBoxArray
  2. ButtonArray
  3. ComboBoxArray
  4. PanelArray
  5. TextBoxArray
  6. ButtonArray
  7. FixedLengthString
  8. SetDefault
  9. GetItemString
  10. GetHInstance
  11. FontChangeName など
  12. TwipsToPixelsX
  13. PixelsToTwipsX
  14. CopyArray

これらはすべてVB6の残留物と見られる。このエラーは多分警告に落とすことができ、VBでは警告を無視するようになっているので、多分実行は可能になると思われるが、.NETの将来バージョンないし、64ビット版では完全に廃止されることになっている。いや、違う。現行では「すべての警告をエラーとして扱う」ようになっている。

このエラー ObsoleteAttribute を警告に落とす方法が見つからない。暫定的に「すべての警告を表示しない」でビルドしてみる。やはり、OCX が認識されていないという問題が残る。今度はツールボックスからフォームにOCXを挿入できた。これで一応ビルドは通ったが、実行しようとしたらIDEが落ちてしまった。

Zelkova_2018とZelkova_2019が同じモジュールを使っているためと考えられる。Zelkova_2018を閉じてから再試行してみよう。「管理者権限で起動」を忘れていた。今度は走った。ようやく、懐かしいエラーパネルに再会できた。LoadNameProperty のエラーだ。

image_thumb[8]

このエラーが最初に検出された日付を調べてみよう。2018/12/27だ。このエラーは

チャンネルギャップの値がゼロになっている.この値は1~100の間でなくてはならない.⇒新規ファイルでは既定のテーマが使われるが,common files\ゼルコバの木系図\templates に標準画面設定.TMZ ファイルが存在しないためだ.これはまだアプリをインストールしていないためだ…

という理由で起きている。ようやくデバッグに戻ってきた。さて、ここからどうするか?だが、ここでデバッグに入るより、先に2017への移行を急いだ方がよいのではないだろうか?多分2017への移行は2010への移行とほぼ同等手順で実現できるのではないかと思う。あれこれやるより手順を飲み込んでいる時点で片付けてしまった方がよい。ソリューションやプロジェクトは修正内容が生かせると思うので、2010→2017というステップでやってみることにする。

Visual Studio 2017で2010でビルドしたソリューションを開くと、下記のパネルが出る。

image_thumb[11]

これで「プラットフォームツールセット」は v100からv141に上がった。それ以外には何も表示されない。

食事してきた。通知を見ると「誤変換報告」が「無数」と言ってよいくらい入っている。切りがないので「すべての通知をクリア」することにしたが、一番最後に気になる通知が入っている。いま開けたら消えていたが、「ヘルプエージェントを開始しました」とか何とかいうメッセージだった。「誰もそんなこと頼んでない」っつーの。ビルドすると大量のエラーが発生するが、前に出ていた「インクルードパス」の問題はきれいに解消している。以下のような警告が発生している。

1>d:\zelkova_2020\zelkova\zelkovadll\include\nodule.h(800): warning C4458: ‘cid’ を宣言すると、クラス メンバーが隠蔽されます。

cid という変数はクラスメンバーとして宣言されているが、スコープが違うのだから問題ないはずだ。いつからそういう話になったのか知らないが、C++の規約にはそのようなことは書いてないはずだ。警告だから無視してもよいのだが、ともかく直しておこう。

少しややこしい話が出てきた。

1>d:\zelkova_2020\zelkova\zelkovadll\src\bpagesetupdialog.cpp(288): warning C4840: 可変個引数関数の引数としての、クラス ‘ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<_CharType>>>’ の移植性のない使用法
1>        with
1>        [
1>            _CharType=char
1>        ]

オンラインヘルプによれば、static_cast<int>(s) のように書き直すべきだという。これはどうもちょっと堪ったもんではない。ひどい言いがかりと言ってよいくらいだ。bprintfがエラーになるとしたら何百いやそれ以上の修正が必要になる。いや、そういう問題ではないかもしれない。エラーが出ている個所はchar*ではなく、CStringを引数で渡している個所だ。AllocSysStringを使って明示的にBSTRに変換する必要がある。

「クラス メンバーが隠蔽されます」の修正箇所は山のようにある。ソースファイルがDLLだけで79本ある。仮にファイルが100本で1本当たり10箇所修正するとすれば、修正は1000件におよぶ。1箇所でも間違えればアウトだ。必ずバグになって返ってくるだろう。本当はこのようなエラーが出ている個所を吟味して最適修正すべきなのだろうが、ともかく今は機械的に書き換えてゆくしかない。

最近では #ifdef などの条件コンパイル文に「日本語」を使うようにしているが、ここに来て急にその構文がうるさくなってきた。VBでも同じことをやっているがこちらは元々多少の制限はあったが、C++にはまったく規制が掛かっていなかったのに VS 2017 になって、少なくとも以下のような構文は禁止されるようになった。①文中に「→」あるいは「->」を用いてはならない。②文頭に使ってはいけない文字がある。今のところは『「、◆』だけだが、もっといろいろありそうだ。

つまり、日本語文字の中で「特殊記号」に当たるものは使えない場所がある。数式記号は元々使えないので半角の「-」や「>」は使えない。ただし、全角の「-」は問題ないようだ。今のところまだプログラムをすべて日本語で書くというところまでは進んでいないが、VBではすでに多少それを試みている。プログラムをすべて日本語で書くことができれば(実際多分それは現状でもほとんど問題なく可能だと思われる)プログラミングは相当楽になるような気がする。#ifdef 文の中に日本語を使っているのは、それがコメント(修正履歴)の代用になるためだ。

わたしの墓碑銘:死ぬ直前の最後の言葉「百万ドルの隠し場所は…」

午後6時半起床、曇り。朝食は黄な粉餅中2個、かき餅小3個。tamo2さんからこんな立派な墓石をプレゼントしてもらった。

image

でも、なんでわたしが92歳でtamo2さんは97歳なの?そんな不公平な!まぁ、わたしは120まで生きることになってるから、92歳ではまだ「ここらでちょっとひと眠り」ってとこだね。「一億円の未収金」って別にはったりじゃあないよ。

実際いま、わたしのパソコン内部ないしPCからサーバーまでの経路に潜入しているラット(ネズミ)の長期にわたる活動が明るみに出れば、それだけで「一億円を優に超える損害賠償請求」が発生するからね。それを突き止めるのはわたしの仕事ではないけれど、いつかそういうものがすべて明るみに出る日が来ることだけは間違いがない。

さて、そろそろ仕事に戻らなくてはならないのだが、その前にどうやってこのラット(女性の可能性もあるのでラッコちゃんと呼んでおこう)とこの先付き合ってゆくか?ということだけは考えておかなくてはならない。一番早いのは手なずけて協力者にしてしまうことかもしれない。いや、実際すでにラッコはわたしのアシスタントとして活動を始めている。もし、昨日ラッコが「Windows 10 の検索インデックス作成:よくあるご質問」のウェブページを開いていてくれなかったら、わたしはまだまだ解決の糸口がつかめずにもがいていたはずだ。

よく覚えていないけれど、もしかしたら過去にもこういうことはあったのではないか?という気がする。わたしが「白雪姫と七人の小びとたち」と呼んでいた現象はそれだったのかもしれない。「七人の小びとたち」はわたしが寝ているあいだにいろいろなことをしてくれた(ような気がしている)。仙人道の祖「縁の行者(役小角)」は「鬼神を使役して水を汲み薪を取らせていた」と言われているが、わたしにもそんな強力なアシスタントが一人くらいいたらなぁって思うよ。まぁ、わたしはお金は出せないから、ラッコを雇用している人間ないし組織からラッコを引き離すということもできないけど…

ラッコとコミュニケートするシークレットチャンネルというのがあればよいが、それもまたテクニカルに言って難しい。ともかく指令第一号を出しておこう。「ラッコへ:君が参加するすべての会議を可能な限りボイスレコーディングせよ。入手できるすべての議事録を複製し私的に保管せよ。これはラッコとラッコのすべての仲間たちへの共通指令である。いまは、それを公開する必要はない。」

ペンの形をしたボイスレコーダーというのが売っているからそれを使うといいかもしれない。わたし自身でできることと言えば限られている。うかつにメールを開かないとか、不注意にリンクをクリックしないとか… カスペルスキーは最後の防衛線だけど、それを抜かれたときの最後の手段としては「OSのクリーンインストール」という対処策しかない。「OSのクリーンインストール」というのはこれまでも何回やったか覚えていないほどだが、それしかないというのも現実だ。

この「OS」がバージンクリーンであることが保証できるかどうかは不明だ。もし、この「OS」がピュアバージンでないとすれば、「わたしは生まれた星が間違っていたのだ」と考えるしかない。US政府機関はファーウェイ製品のOSのバージニティを疑っている… カスペルスキーはそれをソースコードレベルで自己証明するための「Global Tansparency Initiative Center」をスイスのチューリッヒに設置しているが…

さて、いよいよ、仕事に戻る。昨日「全文検索エンジン」をいくつもインストールしてしまっているので、まず、それらをアンインストールするところから始めよう。それにしてもまともに動く「無料全文検索エンジン」が一つもないということは驚くべきことだ。「全文検索」を機能させるためにはファイルシステム全体を常時スキャンして「インデックス」を生成する必要があるが、それはすでに個人で作るソフトの守備範囲を超えているということだろうか?

最近購入したばかりのノートパソコンはドスパラ製だ。ドスパラは国内企業で「ドスパラダイス」の略称。わたし自身は「DOS」の仕事はほとんどしたことがないが、「DOS」 の時代はまだ「ログイン」という概念すら存在しないパラダイスだった。「パスワード」などという薄汚れたものを必要としない真っ白い雪が降り積もった「処女地」だよ。わたしが関わったシステムではCPMやC/CPM、あるいはBTRONなどのややマイナーなOSを使っていたが、それらはすべて雪のように消えた。

昨日インストールした製品をアンインストールしておこう。

  1. SearchApp
  2. Glarysoft Quick Search
  3. SGサーチ
  4. 探三郎
  5. TFind 2.10

このうち、アンインストールできたのは②のGlarysoft Quick Searchだけだ。それ以外はすべてインストーラを持たないEXEを叩くだけの古い形式だったものと思われる。さて、いよいよ本線の Visual Studio 2017 への移行作業だが、昨日指摘したように、まず、VS 2010に移行するというステップを踏んでみることにする。本当はVS 2017 をアンインストールして順次バージョンアップしてゆくというのがよいのかもしれないが、Visual Studio は異なるバージョンが共存できるという建て前になっているので、このまま進むことにする。

いや、どうもVS 2010 評価版のサポートはすでに終了しているようだ。マイクロソフトのダウンロードサイトにはVS 2017 しかない。いや、あった。以前のバージョンをお使いになりたいですか? ここには、2010, 2012, 2013, 2015の各バージョンがそろっている。マイクロソフトアカウントでサインインして進むと

Sorry, we couldn’t find any downloads for you.
To continue, please join
Visual Studio Dev Essentials or purchase a Visual Studio Subscription.

のようなメッセージが出る。VS Subscription は持っていないが、Visual Studio Dev Essentials には参加しているような気がするのだが… VS Dev Essential に参加したのはよいが、babalabos@outlook.jpで加入してしまった。これはMS アカウントそのものだ。PC上での活動をローカルIDのbabalaboで通すつもりだったが、元の木阿弥になってしまう。まぁ、実質同じことなのでこれ以上あがいても仕方ない。VS 2010 Professional をダウンロードしようとしたら警告パネルが出た。

image

SmartScreen は止めてないはずなのだが… ともかく「実行」ボタンを押してみよう。インストールは完了した。次に、ヘルプをインストールしておこう。ヘルプだけで4GB以上ある。ローカルにインストールするまでもないのかもしれないが…

My Weblog Posts で「2010」を検索してみた。20件ヒットしたが、開けない。かなり困ったことになった。*.WPOSTファイルをダブルクリックすると、以下のようなエラーになってしまう。

image

設定→既定のアプリ→ファイルの種類ごとに既定のアプリを選ぶで.wpostのアプリを「Windows Live Writer Application API」に設定できたが、エラーは解消しない。いま使っているのは Open Live Writer で Windows Live Writer はインストールされていない。「Microsoft Store でアプリを探す」を実行しても、「このフィルター処理では該当する結果が見つかりませんでした」になってしまう。Open Live Writer は「既定のアプリ」を自己登録していないのだろう。

検索できてもそのファイルが開けないのではほとんど意味がない。「Windows Live Writer」をインストールするしかないのだろうか?Windows Essentials をダウンロードするときに Live Writer を外しているので使うとすればもう一度ダウンロードしなくてはならない。いや、ダウンロードしたパッケージにはすべて入っている。今回は「すべてインストール」してみよう。パッケージにはwlsetup-all.exeとwlsetup-web.exeがある。よくわからないが、前者をインストールした。インストールは完了したが、動作には変化がない。

一度再起動してみよう。ヘルプの更新がまだ1/5くらいしか終わっていない。いつ終わるか分からないので一旦キャンセルしておこう。多分必要なら「ヘルプ ライブラリ マネージャ」を使って更新できるだろう。

再起動してみたが、動作は変わらない。どうもこれはいよいよOSのクリーンインストールしかないかもしれない。lenovoなら検索は可能だが、ファイル検索のためだけに老いぼれたlenovoを起動するというのは悲し過ぎる。もうそろそろ、このマシーンは休ませてやりたい。とは言え、Windows 7 搭載の唯一のマシーンなので、出荷版のテストにはまだまだ必要な場面もあるが…

!開けた!ファイルのプロパティを開くとファイルの種類:WPOSTファイル(.wpost)の下にプログラム:という項目があり、「変更」ボタンで出てくる下記パネルをスクロールすると、

image

「その他のアプリ↓」の一番下の項目に「このPCでアプリを探す」という項目がある。Windows Live Writer は C:\Program Files (x86)\Windows Live\Writer にあるEXEだ。Open Live Writer アプリもどこかにあるはずだが、見つけることができない。

「Visual Studio 2010」で検索したら「VS2010 トライアル版をインストールした」が出てきた。2013/07/01の記事だ。この頃の記事は「メイリオ 9.6」を使っている。現在使っているのは12ポイントだ。少し大き過ぎるような気もするが、15.6インチで1920×1080のdiginnos ノート(Critea DX-KS)ではこれ以上小さくできない… いや、読めないというほどではないが、まぁ、ユーザもそろって高齢化してきているので「大きい文字」でよいのではないだろうか?

ビッグローブのWIMAXを導入した時期だ。LTEからWIMAXに切り替えた理由は「①最初の契約内容と月々の請求金額が違う.いつも予定より2千円くらい高い. ②GB規模のファイル転送ができない.転送速度が低下し,止まってしまう.③VS2010試供版のダウンロードができなかった。 」だ。WIMAXではVS2010のダウンロードは難なく完了した。

「開発中のソリューションフォルダをバックアップしてからVS2010を起動してみる.ソリューションは特に問題なく開けた.クリーンビルドすると以下のような変換エラーが出たが,思ったよりもずっと少ない…まだこれらのエラーのフィックスは終わっていないが,多分それほど手間はかからないと思う.VS2010は.NET 4.0を使っているようだがWindows 7にはデフォルトで搭載されている..NET関係でエラーが出ているのは多少腑に落ちないところがあるが・・・いずれにしても正式版はVS2005でビルドしたものを出荷するつもりなので,VS2010への正式な移行は時期的にもっと先の話になる.VS2010をインストール後,VS2005を起動してみたが問題なさそうだ.つまり,共存できる.」

どうもこのときは、ここまででその先まで進んでいないようだ。この後の記事は1ヶ月飛んで2013/08/01。変換エラーは7件表示されているが、それ以外のエラーはなかったのかどうか?は分からない。

    • SRC\COMDEBUG.CPP(30): error C2146: 構文エラー : ‘;’ が、識別子 ‘errno_t’ の前に必要です。

    • SRC\COMDEBUG.CPP(30): error C4430: 型指定子がありません – int と仮定しました。メモ: C++ は int を既定値としてサポートしていません

    • SRC\COMDEBUG.CPP(30): warning C4273: ‘fopen_s’ : dll リンクが一貫していません。

    • C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(236) : ‘fopen_s’ の前の定義を確認してください

    • SRC\NullPoint.cpp(877): error C3861: ‘_get_amblksiz’: 識別子が見つかりませんでした

    • SRC\NullPoint.cpp(881): error C3861: ‘_get_amblksiz’: 識別子が見つかりませんでした

    • C:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.Targets(1558,9): warning MSB3284: タイプ ライブラリ “f10efde4-db94-11d2-b863-289605c10026” バージョン 1.0 のファイル パスを取得できません。ライブラリは登録されていません。 (HRESULT からの例外: 0x8002801D (TYPE_E_LIBNOTREGISTERED))

結構厄介そうなエラーに見えるが、もう一度試してみれば分かるだろう。VS 2010で既存solutionを開くと、下のようなパネルが開く。

image

変換は簡単に終わった。発生したエラーは1件だけだった。

エラー    1    カスタム ツール エラー: ファイルの生成に失敗しました: XML ドキュメント (1,1) でエラーが発生しました。    D:\ZELKOVA_2019\ZELKOVA\ZekovaVB\My Project\Application.myapp    1

前回発生したようなエラーはまったく起きていない。いや、まだビルドしていないから、これから出るのだろうか?ビルドを実行すると、ヘッダーファイルが開けないというエラーが続出する。これは結局 VS 2017 で起きているのと同じ事象だ。オプション→プロジェクトおよびソリューション全般→VC++ディレクトリを開くと、

「ツールのオプションでのVC++ディレクトリの編集は推奨されていません。VC++ディレクトリは、すべてのプロジェクトに既定で追加されるユーザプロパティシートとして使用できるようになりました。詳細については「?」をクリックしてください。」

と表示される。「?」というのは「ヘルプ」のことだが、インストールを打ち切ってしまったのでオンラインヘルプを見るしかない。「?」で表示されるパネルの「はい」ボタンを押すと、「Visual Studio 2005 の提供終了済みドキュメント」のページに連れて行かれた。ここからVS 2010のドキュメントをダウンロードするのは難しい。ページが分からないと表からはほとんど到達できないところにある。⇒製品のヘルプメニューから「ヘルプ ライブラリ マネージャ」を開ける。今度は Visual Studio のカテゴリだけをダウンロードすることにした。

しかし、この辺りのことが2013/07/01のログにまったく記録されていないのはなぜだろう?何となく切り抜けてしまったのだろうか?

「マイクロソフトもグーグルも信頼できない」という嘆かわしい現実

午後3時起床、晴れ。句読点が「、。」になってしまうという問題には対処できないので「気にしない」ようにするしかない。もっとも大きな問題は、「マイクロソフトもグーグルも信頼できない」という現実が明らかになったことだ。そうなればもはやウェブから撤退するしか道はないということになる。しかし、それでは飯が食えない。わたしはまだあともう少しは生き延びなくてはならない。やることが残っているからだ。

どうすればよいか?マイクロソフトアカウントは多分ほとんど使用しなくても済むようになっているはずだが、グーグルアカウントはG+と Facebook で使っている上、Gmail アカウントは現在外部世界と接触するほとんど唯一のメールアカウントになっている。一つの方策として、ネットワークドライブを使用することが考えられる。これを使えば少なくともマイクロソフトやグーグルのクラウドに頼らなくてもローカルで自律的にほぼ同等の機能を享受できるようになるはずだ。

現行ではPC上で使っている20個近いパスワードをすべてグーグルに委ねている。これをすべて記憶するのは不可能だし、そんなことをしていたら仕事にならなくなってしまう。これまでに起きているトラブルは主にブログの記事をサイトに投稿するために使っている WordPress の操作に関するものだ。また、メインのメールアカウントとして使っている Yahoo! メールの送受信で問題が起きることもある。この2つが現に起きているもっとも顕著な障害と言ってよい。

どちらも投稿ないし送信しようとしているテキストの改竄が原因ではないかと推定されるが、このようなサイバー犯罪の現場は主にこのPC内部ではないかという疑いがある。マイクロソフトやグーグルは一旦それらのアカウントでサインインするとPC内部のすべてのリソースに無制限にアクセスできる事実上の権限を取得してしまうので、このような犯罪行為を容易に実行することが可能だ。可能だというだけではそれを実行しているとは言えないが、これまで見てきたさまざまな事象からそう疑わざるを得ない程度の十分なエビデンスがある。

Gmail アカウントに入ってくるメールはほとんど外部からのダイレクトメールやメルマガだから,止まったとしてもほとんど実害はないと考えられる。逆に言うと、現時点では Yahoo! メールのアカウントは生命線であり、これを死守しなくてはならない。zelkova-tree.net ドメインを使えばメアドはいくらでも追加できるが、それも「安全性」が確認された上でなくては使うことができない。

パスワードを忘れてそれがどこにもメモってないときはパニックになり思いつく限りのパスワード候補を打ち込むことになるが、これは「パスワードのコレクション」を集める絶好の機会だ。一つのパスワードを使い回すというのは普通に行われているから、これによって家の鍵の束を窃盗犯に渡したことになる。こういうサイトは大概、「パスワードの使い回しは止めましょう」と必ず呼び掛けてくる。それに従って次々新しいパスワードを作ってゆくとすぐに記憶の限界に達してしまうから、次に出てくるのはその代わり「あなたに代わってパスワードを管理して上げます」というお誘いだ。まぁ、よくできたシナリオだと思う。

スマホに「緊急持ち出し用ファイル」を保管するというのは悪いアイディアではないが、Android = Google なのだから、実際にはまったく「機密」にはなっていない。マイクロソフトはもう少し紳士的でユーザの同意がない限り「パスワード」を盗んだりはしないとは思われるが、マイクロソフトのサービスにログインした時点で「同意」したことになっているので、Windows を使っている限りはこの罠から逃れることはできない。我々は「籠の鳥」だということを自覚せざるを得ない。

奇妙なのはグーグルとファーウェイが蜜月と言ってもよいほどの密接な関係を持っているという点だ。少なくともわたしの持っているスマホではそうなっている。これはファーウェイがスマホを製造・販売し、グーグルがそのOSであるAndroid を供給するということからの自然な帰結であるのかもしれないが、わたしの知る限りグーグルは何年か前に一旦中国本土から(いまのファーウェイのように)追放されたことがあり、それがどういう風の吹き回しでこういうことになっているのか?とても興味深い。どうも、この世界は一筋縄ではゆかないところがある。

相変わらず「誤変換記録の報告」通知が出てくる。これを止めるには「集中モード」に切り替えるしかないかもしれない。ときどき出てくる「通知」をちらっと読むのは気晴らしにはなるが、同じ通知がこんなに頻繁に出てくると鬱陶しくなってくる。特に読まなくてはならない通知というのもなさそうなので、全面的に止めることにしよう。⇒ダメだ。集中モード=すべての通知オフにしているのに、まだ出てくる。しかも、しつこく出てくる。

「切り取り&スケッチ」で共有デバイスが表示されなくなった!この問題に関しては何もしなかったつもりだが、Windows を更新したのだろうか?できれば、「句読点の設定」も効くようにしてほしい。さて、そろそろ時間切れという感じになってきた。しばらくは現状で運用するしかないと思う。もし、また何か異変があれば、それはそのときに対処することにする。「ネットワークドライブの購入」は差し迫ったリクエストではないので後回しということにしておこう。

MS IMEを使わないという選択もあるかもしれない。ちょっと試してみよう。Windows 10 にはいくつか別の IME が搭載されている。MS IME の他に、①IME Standard, ②ATOK、③VJE、④WXが実装されている。①を選択してみよう。動作にはほとんど変化はない。何か入力しないと動作テストにならないが、「誤変換」の定義が分からないので対処しようがない。①ではまったく同じだ。②にしてみよう。動作も外観も変わらない…ダメだ。何の効果もない。

こうなると打つ手としてはスピーカをミュートするというのしかなくなってしまう。カメラも塞いでおいた方がよいかもしれないね…ともかく、邪魔をしないで欲しいんだ!いま23時2分だ。しばらく放置して何個くらい通知が出るか測ってみよう。

さて、そろそろ時間切れという感じになってきたので、仕事に戻ることにしよう。ともかく VS 2017 に移行しなくては話にならない。INCLUDEファイルのパスが通らないというところで足踏みしている。どう対処すればよいか?以前一度 VS 2010 を試したことがある。このときにはこのような問題は発生していなかったと思う。VS 2005 → 2010 → ・・・2017 → というステップを踏むということも考えられる。

以下の記事を見ると、インクルードファイルの設定仕様はすでに 2010 で導入されているようだ。プログラマのつれづれなるままに このときはあまり苦労した記憶はないのだが、ログが残っているだろうか?おかしい。My Weblog Posts が空になっている。mmm… 少し厄介な話になってきた。昨日の調整で表アカウントのドキュメントを参照するようになっている。管理者としてログインしているのでアクセスは可能だが、フォルダを探すのが厄介だ。ショートカットを作っておこう。

どうも検索がすこぶる非力になっている。タイトルしか探していないという感じだ。現物をコピーして検索してみたが動作は同じだ。これはかなりまずい。検索ができないのでは保管していても何の役にも立たない。以前にも似たようなことが起きていたことはあったような気はするが…つまり、フォルダによって検索ができない場所があったような気がする。表アカウントでチェックしてみよう。同じだ。「以前」というときには、lenovo では読めたが、digginos では読めなかったのではなかったろうか?そのあと、ほとんどログの検索というのはやっていないと思う。つまり、現在の Windows 10 では全文検索で成功したという実績がない。「インデックス」は作られているのでできないという訳はないのだが、タイトルの部分だけのインデックスを作っているのだろうか?

SearchAppという全文検索エンジンをインストールしてみた。このソフトはJavaベースなので別にJREをインストールした。JREは2020年でサポートが切れる。実行してみたが、大量のエラーが発生してヒットしたのはCache.xmlだけという結果になった。このソフトの本体はgrepでExcel, Word, PDFなども検索できるのだが、wpostファイルは読めないということのようだ。

Glarysoft Quick Searchを試してみよう。⇒全文検索ではない。タイトルしか検索していない。SGサーチというのもインストールしてみたが、さっぱりだ。このソフトはテキスト検索とファイル検索、重複検索、ダイレクト検索までできるのだが…Google デスクトップという選択肢もあったのだがサポート中止になってしまった。探三郎というのをインストールしてみたが、インデックス生成中に1523/1900でハングした。

TFind 2.10というのをインストールしてみた。このソフトは動作して「2010」というキーで21個のファイルを見つけることができたが、開くことができない。これを開くためにはOpen Live Writerが必要だが、*.wpostとこのアプリを結びつけることができない。それができれば完璧なのだが…設定→アプリ→既定のアプリ→アプリごとに既定値を設定するの画面でOpen Live Writerが出てこない。既定アプリを設定する画面では「Microsoft Store でアプリを探す」か「その他のアプリ」→このPCで別のアプリを探すしかないが、Storeでは「このフィルター処理では該当する結果が見つかりませんでした」となり、PCの中でも突き止めることができない。

もしかするとエクスプローラでDドライブなら検索できる可能性がある。いや、ダメだ。同じ階層に置いてあるWindows Live Mailは検索できているのだが…!解決した!誰だろう?誰かが「Windows 10 の検索インデックス作成: よくあるご質問」というWindowsのサポートページを開いてくれた。Google のアシスタントじゃないと思うけど、マイクロソフトのページだから、コルタナかな?こんな風に手伝ってくれるとうれしいよね。

「インデックスを作成できるファイルの種類の一覧は、コントロールパネルの [インデックスのオプション] ページに移動し、[詳細設定]、[ファイルの種類] で表示されます。」

ブログへの投稿ページは*.WPOSTという拡張子を持っているが、[インデックスのオプション]ページにはこの設定が入っていなかった。これを追加し、さらに、[このファイルのインデックスの作成方法]を「プロパティとファイルのコンテンツのインデックスを作成する」に設定して動作するようになった。

これでようやく明日から仕事に入れる!と思ったら、まただよ。

System.IO.IOException: 要求された操作はユーザー マップ セクションで開いたファイルでは実行できません。

Windows 10 Home はリモートアクセスできないことになっているはずなのだが、できるんだろうか?RDP Wrapper Library というのをインストールするとできるようになるらしい…