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つの障害はすべて同時に起こったものと考えて間違いないと思う.ともかく,間違い易いのでレポジトリの名前を変えておこう.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA