Thunderbirdが起動できないという悪夢

OSの再インストールに掛かる前にあらかじめThunderbirdのprofilesをバックアップし,念のためImportExprotTools NGでプロファイル(アカウント情報)をエクスポートして臨んだのだが,復元に失敗した.Thunderbirdではヘルプ→トラブルシューティング情報→プロファイルフォルダで保存フォルダを確認することができる.再インストール後,このフォルダの中に入っている(複数の)*.defaultフォルダをバックアップしたフォルダで差し替えてみたところ,「Thunderbirdでプロファイルが見つかりません」というエラーが起きるようになってしまった.

悪いことにこのエラーはアプリをアンインストール→再インストールしてアカウント未登録の状態まで初期化しても消えない.つまり,Thunderbirdがまったく起動できないという状態になってしまった.わたしの環境ではThunderbirdメールデータ本体は外部ディスクのフォルダに保存するようになっていて,このフォルダはしっかりバックアップを取ってあるから紛失する虞は皆無だが,プログラムが起動できないということになったら最悪このPCのHD自体をフォーマットしなくてはならないかもしれない.絶対絶命のピンチに追い込まれ真っ青というところだ.幸いこの悪夢からは下記リンクの情報で脱出することはできた…

thunderbirdでプロファイルが見つかりませんというエラー

Thunderbirdのメニューにはプロファイルを操作するコマンドは存在しないが,Thunderbirdをコマンドプロンプトから以下のコマンドでプロファイルマネージャを起動することができる.

>Thunderbird.exe –p

image

ここで「新しいプロファイル」を作成し,「古いプロファイル」を削除してやれば問題なく起動できるようになる.新しいプロファイルを作成するときには,アカウント設定やメールデータを保存するフォルダを指定することもできる.これでまたThunderbirdを立ち上げることができるようになったので,ImportExprotTools NGアドインをインストールして,エクスポートしたプロファイルをインポートしようとしたのだが,インポートのコマンドメニューが見つからない.

ツール→設定とデータのインポートはThunderbird付属のインポートツールだが,これはシステムに別のメールアプリがインストールされているときにその情報をインポートするためのもので,いまの場合にはまったく役に立たない.アドオンマネージャはアドオン自体を操作するためのものでアドオンを実行するためのものではない.ImportExprotTools NGをインストールするとツールメニューの一番下にImportExprotTools NGという項目が現れてそこからコマンドを実行することができる.しかし,このときは焦っていたためだろうか?理由はよく覚えていないが,このコマンドを発見することができなかった.

プロファイルのインポートはあきらめて手動でアカウントを3つ登録し,アカウントのアカウント設定→サーバー設定→メッセージの保存→メッセージの保存先で常用している外部フォルダを指定してようやく復元することができた.Thunderbirdで使っているわたしのアカウントはすべてウェブメールアカウントだが,Thunderbirdはネット上の主なウェブメールサーバーを知っているのでこの設定はほとんど自動でやってくれる.最初からそうすればよかったのだが,アカウントごとの細かい調整などもあるのでできれば現状をそのまま復元したかった…

ちなみに現在ネット上で一番安全なメールアカウントはウェブアカウントであるということをご存知だろうか?hotmail, outlook, gmailなどいろいろあるが,昔は「ウェブメールなんて(少なくともフォーマルなコミュニケーションでは危ないから)使っちゃだめだよ」と言われ,捨てメアドなどと蔑まれていたのだが,この間(ネットにアクセスできなかった時期)に大きく変わり二段階認証なども導入されてセキュリティ上もっとも堅牢なアカウトと認識されるようになって来た.逆にドメイン名の付いたメールはそこまでやっていないところが多いので,脆弱なところがかなり残っていると考えられる.(もちろんマイクロソフトやグーグルが本当に信頼できるのかどうか?というのはまた別の問題だ)

ImportExprotTools NGのプロファイルのエクスポート/インポート機能はまだベータ版で動作は保証されない.実際,事後にインポートを試してみたがあまり芳しいものではなかった.一番確実なのは最初からプロファイルマネージャを使って外部フォルダにプロファイルを保存するようにしておくことではないだろうか?現在Cドライブの空き容量は13.4GBある.この作業に掛かったときの空き容量は2.48GBだったので10GB以上増加している.インストールしていないアプリもいくつかあるのでこの先どうなるかはわからないが,OSの再インストールに丸一日を潰しただけのメリットはあったのではないかと思う.

いよいよ本格的な「再開発」の段階に入るところだが,その前に新版と旧版が併存できることを確認しておきたい.ユーザはこれまで使っていたバージョンを温存しておきたいと考えると思われるからだ.馬場研究所でリリースしたプログラムはC:\Program Files (x86)\babalaboというフォルダに格納される.これまではその下のZelkova Tree 2020(古いバージョンではZelova Beta2)に保存していたが,今回の版からはZelkov-Tree 2021に保存するようになっている.わたしの理解ではこれによって2つの異なるインストールを併存させることができるようになっているはずだと考えているのだが,果たしてそうなっているかどうか?試しておきたい.もし,それでうまくゆかないということになるとまたいろいろと厄介な話が出てくる.

ともかく出来不出来はともかくとしてバージョン2.1以下のインストーラを探してみよう.いや,一般ユーザの手元にあるのはおそらく,2.0より前の1.xxxだと思われるのでその辺りとの競合を見た方がよいのではないか?公式リリースの最終版は2018071321-SXATQFMだ.これをインストールしてみよう.ダメだ!OCXの登録に失敗している.

image

新版をアンインストールしてもう一度試してみる.いや,そもそも新版はまだインストールされていない.しかし,デスクトップにはZTのアイコンがあり,起動することはできる.リンク先はZelkova-Tree 2021と表示されているだけだ.ZT2021のOCXは登録されていないはずだから,実際にはEXEを直接叩いて開くというのと同じ動作になっているものと思われる.ZT2021を先にインストールしてみよう.⇒勘違いしている.開発機とタブレットの画面を混同している.開発機にはZT2021がインストールされている.

2018071321-SXATQFMのバージョンは2.0.2.088だ.2.0.0より小さいものの方がよい.2.0.0より若い番号というと2012年まで遡らなくてはならない.2013年12月26日~2014年1月2日のおよそ1年間は2.0.0.000という同じ番号を使い続けている.これはこの時期に「正式版」をVersion 2.0.0という切りのよい番号で発行しようとしていたためだ.結局一年かけてもその目標は達成されず,その後は順調に番号をインクリメントしてゆくことになる.1.9番台の最終バージョンは2012042421-YLUFYWLの1.9.9.99でおそらくこの版がもっとも普及している版ではないかと思う.

1.9.9.99は2012年4月24日にリリースされ,そのあとの公式リリースはほぼ完全に途絶えているので,あとからユーザ会に参加したメンバーもずっとこの版を使っていたものと思われる.さて,ともかくこれを開発機にインストールしてみよう.2012042421-YLUFYWLにはいくつか同名ないし類似の異種バージョンがある.しかし,msiインストーラが生成されたのは2012年4月24日で間違いないように思われる.この版はZelkova Beta2というフォルダにインストールされる.しかし,インストールには失敗した.

image

このエラーはZelkova Beta2は64ビット機にはインストールできないということを示しているものと思われる.今回ターゲットは当面64ビット機に限定しているので対象外ということになるが,バージョンを確定するために32ビット機を起こしてインストール可能であることだけは確認しておこう.⇒32ビット機のSHIRLEYBIRD(tamo2さんが置いていってくれたミニノート,Windows 10)にインストールを試みたが失敗した.この時期はもしかするとXPの時代だったかも知れないが…

Windows 10 32ビット機にインストールできるバージョンというのはあるだろうか?最新版はAny CPUでビルドしているのでもしかするとインストールできる可能性はある.再開発版初版をShirleybirdに送ってみよう.⇒ダメだ.当面は32ビット機はターゲットとしないとしているので,最新版がインストールできないというのはよいとしても,32ビットWindows 10にインストールできる版がないというのもかなりまずいのではないか?64ビットへの移行というのは比較的新しいトレンドなので,既存の公式リリース版の中に32ビットにインストールできる版がないということはあまり考えられない.

lenovoノートは32ビットのWindows 7だった.この時期のリリース版というのはあるはずだ.遅くとも2012年頃にはlenovoを使っている.従って2012年からつい最近まではlenovoで開発していたことになる.Visual Studio 2005を使い始めたのがいつ頃か?正確には特定できないが,かなりの期間はXPとWindows 7がターゲットになっていたはずだ.Windows のバージョンとVSのバージョンの対比も正確なところはよくわからないが,Windows 10にインストールするにはVisual Studio 2012ないし2015ないし2017に移行する必要があったのではないだろうか?2018年12月にはネット復帰し,その時期にDiginnosに乗り換えているが,VS2015を導入したのはそれよりもかなり早いはずだ.

2018/07/13の2.0.2.088はインストールできなかった.2019/01/06でVS2010を試しているので,Windows 10で動作するバージョンというのは2019年より後なのではないだろうか?lenovo のOSをWindows 7から10にグレードアップしている可能性はある.Windows 10 対応は2019年以降と考えてよさそうだが,2019/01/11に「Visual Studio 2017 でビルドして Windows 7 にインストール」という記事がある.

Windows 10のZEKOVA_2020でリリース版を走らせたとき,「タイプ初期化子が例外をスローしました」というエラーが出る.VBのプロパティでコンパイル→ターゲットCPUをAnyCPUからx96x86に変えてやればエラーは解消する.

Windows 7の環境でもこの点は確認されている.Windows 10で生成→Windows 7にインストール,ないしWindows 7で生成→Windows 7にインストールも確認されている.Windows 7搭載機は32ビットCPUと推定される.この記事には「Visual Studio 2015まではXPをサポートしていた」ともある.Windows 7搭載機と呼んでいるのはlenovo G570のことだ.この時期にはまだICU室で延命していたものと思われる.CPUはインテル Core i5 2410Mでビット数は明記されていないが32ビットで間違いない.「Windows 10のZEKOVA_2020」というのは新規導入されたdiginnos(Windows 10 64ビット)のことだ.※

※この点は再確認を要する.現時点では再開発版初版も同じ設定(VBのプロパティ→コンパイル→ターゲットCPU=x86)になっている.

VSの構成マネージャではVBのプラットフォームはAny CPU固定で変えられないが,ソリューションプラットフォームではWin32を選択できる.これまではつねにAny CPUとしてきたが,Win32というリリースを試してみることにする.⇒デバッグモードでは走ったが,リリースモードではエラーになってしまう.⇒デバッグモードで成功したあと,リリースモードでも走行するようになった.ただし,どちらのモードでもForm1.vbにOCXを貼り込むことはできない.

image

一応インストール版はできたのでインストールしてみよう.⇒開発機にはインストールできて実行も可能だが,Shirleybirdにはインストールできなかった.エラーコードはHRESULT=2147024770.ネットで検索するとこのエラーは

pgoledb.dllが依存しているMSVCP60.DLLが無い

ということのようで,MSVCP60.DLLをダウンロードし、C:\WINNT\system32にコピーすれば解決するとある.ShirleybirdにはこのDLLは存在する.ただし,サイズはかなり違うので別物だ.32ビット版と64ビット版の違いだろう.最新版をダウンロードしてみよう.⇒system32フォルダにコピーしようとして拒否された.管理者権限のあるアカウントでログインしているのだが…

System32にファイルを保存できる管理者について。

64ビット機でも32ビットDLLは持っている.

On a 64bit version of Windows, the default folder for 32bit DLL-files is C:\Windows\SysWOW64\ , and for 64bit dll-files C:\Windows\System32\ . 

開発機の32ビット版MSVCP60.DLLとShirleybirdが持っているそれとは同じだ.従って,上記「MSVCP60.DLLが無い」には該当しない.

.NETのバージョンはどうか?⇒Shirleyには.Net Framework 4.8がインストールされている.リリースビルドではC++のランタイムをインストールするためのsetup.exeが作られているのでこれを使ってみよう.VBの必須コンポーネントにはVisual C++ “14” Runtime Libraries (x86)が含まれている.ネット情報ではVC++ 2017ではVC++14.1 再頒布可能パッケージが必要とある.⇒現在Windows のupdateを実施中なのでこれが完了してから,もう一度インストールを試しておこう.その後でランタイムのインストールを実行してみる.

hama2234氏から短信.「家系図ソフトは今でも使用可能ですか?」という問い合わせへの回答に対する返信だ.皆さんしびれを切らしてお待ちになっていらっしゃるのだが…ユーザ会メンバー千人のうちおそらく何人かはすでにお亡くなりになっているに違いない(と確信を持って言える).いまでも有効なメアドはおそらく登録数の一割を切っているのではないだろうか?まぁ,ともかくわたしはまだ残っているのだから残っている時間のうちにできるだけのことをやらなくてはならない…

Visual Studio ではターゲットプラットフォームとしてソリューションプラットフォームとプロジェクトプラットフォームを区別している.ソリューションはプログラム全体,プロジェクトはそれを構成するコンポーネントを意味するが,プラットフォームはそこで使われるCPUの命令セット(の汎用レジスタビット長)を示している.(ソリューションは64ビットでも一部のコンポーネントは32ビットということがあり得る).

現在使われているCPUのビット長は64ビットか32ビットだ.この仕事を始めたころは(メインフレームを除けば)8ビット長というのしかなくて,16ビットパソコンが出てくるのをまだ一度も会ったことのない花嫁のように憧れたものだ.VSでは64ビットをx64,32ビットをx86と表記している.x86というのはCPUの種別で昔8086(8ビット)ないし80286(16ビット)など86系と呼ばれるCPUがあったことの名残りではないかと思われる.別の言い方では64ビットをAny CPU,32ビットをWIN32と表記することもある.

これは主にソリューションプラットフォームや構成マネージャで使われる呼称だ.Any CPUの意味は時と場合によって変化しているようで,昔はAny CPUでビルドしたパッケージが32ビットで走っていたのにいまはそれが通用しないように変わっているような気がする.マイクロソフトのデベロッパ用製品ではパラメータの「設定」と実際の「動作」に齟齬があるというのは普通であるようだ.普通であるだけでなく,それが時間とともに(勝手に)変化してしまうのでそれに付いてゆくのは至難の業と言わなくてはならない.

さて,WIN32でビルドしたパッケージが64ビット機で動作することは確認しているが,ひとつ問題が起きているのでそれを見ておくことにしよう.ZelkovaZ.idlでuuidと一緒にバージョンを設定しているところがある.これもビルド時に更新する必要がある.現在値は3.0だが,アプリと同じ2.2としてみよう.どこかに3.0のオブジェクトが残っているようで,参照の追加で項目がダブってしまう.また,リビルドしてVBからOCXへの参照が解決できない.⇒奥の手の「Form1にOCXを貼り込む」で解消した.「ひとつ問題が起きている」というのはそのことなので,一応これは事実上解消したということになるのだが,uuid(Universally Unique Identifier, マイクロソフトではGUIDと呼ぶ)が同じというのはやはり問題があるのではないだろうか?

ネット上にはuuid生成ツールがあるので書き換えてみよう.Zでは4個のuuidを使っている.その他にGUIDとして定義されているものもある.

  1. uuid 3B5BE240 ZelkovaZ.idl ゼルコバの木系図エンジン for WIN32
  2. uuid F3C38B89 ZelkovaZ.idl ディスパッチインターフェイス
  3. uuid CAB2182C ZelkovaZ.idl イベントインターフェイス
  4. uuid 4E61AC51 ZelkovaZ.idl Zelkova Tree 2016 コントロール
  5. GUID 601c9479 ZelkovaDLL.cpp BASED_CODE _tlid V=2.1
  6. GUID 4E61AC51 ZelkovaCtrl.cpp IMPLEMENT_OLECREATE_EX ZELKOVAZ.ZelkovaCtrl3.1 クラスファクトリ
  7. GUID F3C38B89 ZelkovaCtrl.cpp IID_DZelkovaZ3 インターフェイス ID
  8. GUID CAB2182C ZelkovaCtrl.cpp IID_DZelkovaZ3Events インターフェイス ID
  9. GUID 3B5BE240 ZelkovaZ.cpp BASED_CODE _tlid アプリケーション V=2.0

_wVerMajorと_wVerMinorでDLLとOCXのバージョンを設定している.これらの値はタイプライブラリに保存されているものと思われる.uuidと_wVerMajor,_wVerMinorが一致するものを同一オブジェクトと認定しているのだろう.修正箇所には「2012-10-16 再開発版」を入れておく.⇒いや,単にコメントを挿入するのではなく,コンパイルオプションとして切り分けられるようにしておいた方がよいと思う.

ShirleyのWindows Updateは完了し再起動したが,1本だけ更新に失敗している.悪意のあるソフトウェアの削除プログラムでもしかするとカスペルスキーが妨害している可能性も考えられる.Windowsのバージョンを1909に上げるという更新が出てきたので,実行しておこう.

コンパイルオプションは「再開発版20201016」とし,ZとDLLのそれぞれのstdafx.hで定義する.IDLファイルを修正していてVisual Studioがクラッシュしてしまった.IDLファイルでは日本語リテラルを使えないのだろうか?「再開発版20201016」を止めて「ZELKOVA2021RESTART」を使うことにした.

Shirleyを再起動して更新はすべて完了.上記のエラーも解消している.ここでもう一度WIN32版のインストールを試みたが,同じエラーになった.エラーを無視して完了することはできるが,アプリを起動しても立ち上がって来ない.このマシンにはゼルコバの木ベータ2がインストールしてあったので走らせてみたところ,下記のエラーになった.

image

GCのロードに失敗しているようだ.このアプリは記憶には残っていないが※,存在しているところを見ると一度は実行に成功しているのではないだろうか?32ビット版を32ビット環境でビルドするということは考えられるが,その前にVS2017には64ビット版と32ビット版があったはずなので,それを試してみるということも考えられる.C++ランタイムをインストールするためのsetup.exeを実行してみたところ,エラーが発生した.ログを見ると下記のような障害が起きている.

※1.9.9.99のインストールを試みたとき生成されたものと思われる.

(2020/10/16 19:19:01) u’vcredist_x86\vc_redist.x86.exe’ from ‘https://aka.ms/vs/16/release/14.25.28508/VC_Redist.x86.exe’ to ‘C:\Users\Zelkova\AppData\Local\Temp\VSD5A51.tmp\’

どうもこのリンクはリンク切れになっているようだ.いや,存在する.こちら(ネットアクセス用のサブマシン)ではダウンロードできた.⇒Shirleyはネットに接続していなかった.⇒ネットに接続してsetup.exeを再実行してみたが,以下のエラーになった.

image

OKでダウンロードを再実行しても効果はない.何がまずいのかよくわからないが,C++のランタイムはマイクロソフトから単体でもダウンロードできるはずなので,まずそれを試してみるということにしておこう.※後述で試している. ZELKOVA2021RESTARTを立てて(uuid更新バージョン)ビルドするとビルド中に以下のエラーになる.

image

もう一度ビルドするとエラーは解消したが,実行時に以下で停止した.

image

考えられるのはネットで生成したuuidがマイクロソフトのGUIDの要件に合致していないということくらいだが…ネットのuuidはバージョン4の乱数で生成されている.ctlreg.cppで起きているエラーはやはりGUIDに関係したものだ.

How can I give an old ActiveX control new GUIDs?
GUIDs pop up everywhere in software!

VSはbuilt in GUID generatorを持っている!多分これを使えば間違いないだろう.ShirleyでVC++ 2017の再頒布可能パッケージをダウンロードしてインストールしたが,WIN32版のインストールには失敗した.今度は少し違うエラーコードが出ている.

image

コメントを残す

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

CAPTCHA