ゴールデンウィーク中の今月 1 日 (米国現地時間 4 月 30 日) に Windows 10 の最新版である April 2018 Update が公開されました。 概ね半年ごとに繰り返されるアップグレードで, 最初の版である 1507 から 1511, 1607, 1703, 1709 そして 1803 と今回が 5 回目に当たります。 それだけなら良かったのですが, 問題は これが「大型アップデート」ではなく実質「アップグレード」であることです。 同じ Windows 10 の名前を冠していても例えば 1709 と 1803 は別物で, ちょうど Windows 7 から 10 へ上げたのと同じように互換性や不具合の問題が発生するのでした。
実際自身も互換性問題や不具合の発生に遭遇していて, こうなると「気軽にアップグレード」とは行きません。 何しろ Windows 10 では「回復」を始めとしたロールアップ系処理の信頼度がボロボロで, 特にリカバリー領域の存在するノート系に至っては, 10 台以上の PC で未だかつてロールアップに成功したためしがないのですから。 (笑) とはいうものの, 自作ソフトの動作確認は必要なので, メイン使用している東芝 dynabook Qosmio T851/D8CR について, 2TB SSD→2TB SSHD の丸ごとコピーという保険を掛けた上で 1 日夜から 2 日にかけて 1803 へのアップグレードを敢行しました。 2 日掛かっていますが, ダウンロードを始めたのが 23 時頃だったのでダウンロード終了を待たず就寝…という毎度のパターンで, 実際には半日程度の勘定です。
結果ですが, 巷と異なり幸い手元の環境では不具合等は発生しませんでした。 前に書いたとおり Windows 7 から 10 へのアップグレードの時点で東芝謹製のプリインストールソフトや特殊ハード (裸眼 3D など) は全滅していますので, 互換性問題も皆無です。
さらに連休が終わった 9 日, 今度は毎月恒例の Windows Update で 手元の環境では 10 個ほど更新プログラムが配信されました。 巷の情報によると その中の一つ「2018-05 x64 ベース システム用 Windows 10 Version 1803 の累積更新プログラム (KB4103721)」が曲者で, これが 1803 自体と変わらないほど数々の不具合や互換性問題を発生させる代物のようです。 幸い何も問題は発生しませんでしたけれども…。
というわけで右上画像のような感じとなったわけですが, 一つだけ違和感が…。 それは拙作 LHMelt のバージョン情報で, クリックして拡大表示させると判るのですが, Windows の版が「Windows 10 Enterprise x64」となっています。 一方 Windows 設定画面のバージョン情報では「Windows 10 Pro」と本来のエディションが表示されています。 「はて?」と思いながら少々調べてみたところ, システム…つまり x64 側レジストリーのエディション情報が Pro なのに対して, WoW64 (x86) 側のレジストリーでは Enterprise となっているのでした。
当該情報は単なる文字列ですし特にシステムの動作に違いが発生しているわけでもなく特に問題はないのですが, 何かモヤモヤします。 (笑) そこで, アップグレード方面のテストを兼ねて外の環境でも試してみることにしました。
さて, まずは同じ Windows 10 Pro ではありますが, VMware Workstation 12.5.8 Pro のゲスト環境を試してみました:
上画像, ホストと同じ Windows 10 Pro (x64) 環境ですが, こちらでも WoW64 側では Enterprise 表記となっていました。 Twitter で呟いてみたところ巷でも発生しているらしく, どうやら「たまたま」ではなく普遍的に発生する現象のようです。 仕様なのかバグなのかは判りません。
続いて下画像, 今度は 32 ビットの x86 環境で 1803 へのアップグレードを試してみたところ, …出ました。 KB4103721 のパッチ当てが終了したあとの再起動でブラックアウト現象が。 (笑) ログイン画面までは普通に進むのですがログインした途端ブラックアウトします。 こうなると巷の情報どおり「スリープ→復帰」か「『Win キー + Ctrl + Shift + B』同時押しによるグラフィックドライバーのリセット」を行わないと復帰できません。
ただ, 仮想環境だからなのか「発生するときは再起動しても連続して発生」「発生しないときは何度再起動しても発生しない」と頻度にムラがあるようです。 それはともかく, 頻繁に遭遇するのは困りものですので, 仮想環境のメリットを活かしサクッとパッチ当てを「無かったこと」にして再度パッチを当てたところ, 現象は発生しなくなりました。 普通に起動するようになりましたので LHMelt のバージョン情報を確認してみたところ, 32 ビット環境では「Windows 10 Pro」の表記でした。 「32 ビットだから」ではなく「WoW64 だから」の現象のようですね。 >Pro なのに Enterprise 表記なレジストリー
次に適当な実機を選定し試してみたのですが, 64 ビット機 4 台, 32 ビット機 1 台と都合 5 台を試したにもかかわらず, 1803 と KB4103721 の どちらでも何も問題は発生しませんでした。 何も発生しないと非常に悲しいのですが, 出ないものは仕方がありません。 あ, 64 ビット機では上述の Enterprise 表記現象が発生しています, 念のため。 ともあれ, 最後にタブレット系を試すことにしました:
まずは左画像の GamePad Digital GPD Pocket です。 こちらは WoW64 側でも「Windows 10 Home」と正常な表記になっています。 「WoW64 側が全滅」というわけでも無さそうで, 謎は深まりました。 バグではなくて仕様なのかもしれませんね。 (^^;) あ, フォントや女の子の画像がボヤけ気味なのは, 画面設定が 125% の拡大表示になっているからです。 7 インチでフル HD では, さすがに字が小さすぎて辛いものがありますので。 (^^;;
続いて右画像の Lenovo Miix 2 8 (32GB モデル) です。 ストレージが 32GB しかないところへ Genymotion + VirtualBox な Android 4.3 環境を構築してありますので, 空き容量確保が大変だったのですが, 1803 へのアップグレードや KB4103721 で問題の出ることはありませんでした。 GPD Pocket の Atom x7-Z8750 辺りと異なり Atom Z3740 や Z3775 では そろそろアップグレードできなくなるかとも思ったのですが, 今回は まだ上げさせて貰えたようです。 恐らく今回が最後でしょうね。 (^^;)
…と, 都合実機 8 台 (64 ビット 6 台, 32ビット 2 台) と仮想環境 2 台 (64 ビットと 32 ビットが 1 台ずつ) で 1803 へのアップグレードと KB4103721 の適用を試したところ, 唯一仮想 32 ビット PC のみで不具合が発生しました。 頻度としては そんなに高くなかったわけですが, 「仮想環境でも発生する」というのがなかなか興味深い結果と言えそうです。 いえ, 結果として解消できたからこそ言えるわけですけれども…。 (笑)
上の記事の余談として書く予定だったのですが, こちらのほうが長くなりそうだった上にカテゴリーも異なることから, 別記事として書くことにしました。 同じ画像が使われていたりするのは その名残です。 (笑)
それはともかく, 今回 UNARJ32.DLL の修正で久々に実機を含む手元の環境全てで動作確認を行う必要がありましたので, その中から修正の大小にかかわらず毎回必ずテストを行っているメイン環境上のものを選んで, 当該環境の選択理由や拙作ソフトでの対応内容などを, LHMelt のヘルプ風に簡単に纏めて覚え書き代わりに書いておくことにします。
いろいろなところで時々書いているように, 拙作ソフト…特に UNLHA32.DLL と LHMelt については Win32s 環境での動作が必須となっています。 というのも, 未だに要望や質問メールが飛んでくるからなのでした。 ただ, 昔なら国内外含めて 15 カ国ほどから飛んできていたメールも, 今では生き残りがフランスとチェコだけになってしまいましたけれど…。 随分粘っていた米国辺りも ついに絶滅したようです。 (^^;) もっとも, 「絶滅」といってもメールが飛んでこないだけで, 潜在的には存在していると思います。 どうしようもなく古い環境が必要…というケースはありますから。
結果, Win32s…つまり MS-DOS 6.2/V + 日本語版 Windows 3.1 から Windows 10 1803 までの各 OS でテストを行う事態を招いています。 (笑) 10 年ほど前までなら実機も残っていたのですが, さすがに殆どが廃棄されてしまい, 今では基本的に仮想 PC ソフトを使った仮想環境上でのテストとなってしまいました。 救いは実機と仮想の違いが影響するようなジャンルのソフトではなかったことかしら?
さて, 前段の余談はこれくらいにして各環境の説明に入っていきましょう。 まずはホスト環境である実機の東芝 dynabook Qosmio T851/D8CR です:
OS は Windows 10 Pro (x64) です。 Windows 8.1 の後継バージョンとして 2015 年に発売された現在最新の OS で, Windows NT としてのバージョンは 10.0 と OS 名に合わせた数字へ引き上げられています。 (Windows 8.1 は 6.3)
名前の由来は「7 番目だった Windows 7 から数えて 3 番目」…つまり, 6.1 (Windows 7) → 6.2 (Windows 8) → 6.3 (Windows 8.1) → 10.0 (Windows 10) ということのようです。
スタートメニューの復活や UWP アプリのオーバーラップウィンドウ化など, Win 8/8.1 での失敗を教訓に むしろ Win 7 へ先祖返りしている感もありますが, セキュリティー方面の強化を筆頭に中身自体は大きな変更が加えられています。
この OS を使う上で最大の難点は「半年ごとに繰り返される互換性問題を伴った大型アップデート」でしょう。 もはやアップグレードレベルで, 毎回互換性問題や不具合の発生で巷が阿鼻叫喚に陥っています。 幸い手元では Windows 10 へのアップグレード時と 1607 の頃以外大きな問題には遭遇していません。 あとは, 近々 32 ビット版アプリ…どころかデスクトップアプリそのものの使えなくなる運命が待ち受けていることでしょうか?
拙作ソフトでは特に当該 OS 個別の対応は行っていません。 何か挙げるとすれば Win 10 で またもや変更が必要になった Win のバージョン判定ルーチンくらいでしょうか? 本当は DLL 読み込みの脆弱性絡みで PreferSystem32 辺りに対応したいところなのですが, その変更が逆に脆弱性の発生に繋がりかねないので, 様子見を決め込んでいます。 幸い Windows 7 までの対応で完全に抑え込めていますし…。 (^^;)
あと, デザインを含めた描画周りの変更にも本当は対応しないとならないのですが, ことデザインに限っては「何が悲しくて Windows 3.1 もどきへ退化させる必要があったの?」と思っていることから, 放置しています。 (笑)
テスト環境としては「巷の一般的な環境」としての役目を担っていますが, 元々が Windows 7 Home Premium だったものを Ultimate へアップグレードし, さらに Windows 10 Pro 1511 へ, 続いて 1607, 1703, 1709 そして 1803 と 4 回の大型アップデートを経ている環境である点は, 頭に置いておく必要がありそうです。
そういえば, 1703 で「圧縮 (lzh 形式) フォルダー」が使えなくなりましたが, あれは脆弱性方面は全く関係なく, 単に日本語版対応のプライオリティーがガタ落ちしたからに過ぎませんので, 念のため。 (^^;) Windows 8 辺りから顕著になり始め Windows 10 で さらに酷くなりましたが, もはや日本語版は他の超マイナー言語版と同じプライオリティーでしかなく, 縦書き方面を含めて今の MS に まともな日本向けの個別対応を望むのは無理でしょうね。
1803 といえば, タスクバーが殆ど不透明となってしまった上に その透明度を上げられなくなった点が, 個人的に激しく許せなかったりします。 (笑)
それはともかく, 2011 年 8 月の購入と近々 7 年にもなろうという最長不倒の長期政権を樹立していて, 退役は近かったはずの Qosmio T851/D8CR なのですが, MZ-75E2T0B/IT…つまり 2TB SSD な SAMSUNG 850 EVO へ換装したことによる体感速度向上の威力が凄まじすぎて, あと 5 年くらい…要は当該機の寿命まで使えてしまいそうな気配です。 (笑)
ここからは VMware Workstation 12.5.8 Pro を使用してホスト上に構築されたゲスト環境になります。 VMware Workstation 14 Pro を買ってはあるのですが, 以前書いたとおり, 仮想環境が まともに動作しなくなってしまうため 12.5 を使い続けざるを得なくなっています:
ホストと OS が同じ Windows 10 Pro (x64) 環境ゲストです。 上述したとおり一般的な環境を想定した役目を担っているホストですが, VMware を始めとした各種仮想 PC ソフトに仮想 DNS…といった面々を筆頭にいろいろなソフトを入れすぎて, もはや一般的な環境とは言えなさそう…というわけで, こちらは純粋な環境としての役目を担っています。 経験則的には, 「報告された不具合がホストでも この環境でも発生しない」という場合は, インストールされているソフトなど報告者の環境固有の問題であるケースが殆どです。
拙作ソフトは どれも 32 ビット版なので, どうしても 64 ビットである x64 版 OS では対応しきれない部分が発生してしまいます。 一番目立つものとしては「ダイアログ系のウィンドウがアプリの中央ではなくデスクトップの中央に表示されてしまう」現象が挙げられます。 対応は可能なのですが, Win9x や Win32s など 16 ビット版 OS への対応もあって少々面倒なのと, 巷のソフトでも同様のものが多数存在していることから, 放置されているのが実情です。 (^^;)
ちなみに, ホスト PC が更新された暁には, ゲスト名のとおり Qosmio T851/D8CR を再現した環境としての役目を担うことになり, 現在ホストに入っている主要ソフトが こちらへインストールされることになります。
Windows 10 Pro (x86) 環境ゲストです。 Windows 10 や Windows 7 など, Windows XP 以降の OS には x64 (64 ビット) 版と x86 (32 ビット) 版とがあって, Intel 系であれば Core 2 Duo 辺り以降の Intel 64 / AMD64 対応 CPU を搭載している PC であれば双方使用が可能です。 昔はデメリットのほうが大きい場合も多々…と言わざるを得なかったのですが, 今では x64 版のほうが普通となっています。
とはいえ まだまだ x86 環境も使われていることから, そちらのテスト用として当該環境が用意されています。 上の記事で書いたように x86 環境と WoW64 環境でも状況が異なってきますから, 別途専用のテスト環境は必要なのでした。
拙作ソフトとしては 32 ビット環境がホームなので, 「32 ビット環境への対応」というものは行っていません。 反対にプログラム的には数値を筆頭とした諸々のデーターが 64 ビットで扱われていますので, 所謂「32ビット (4GB) の壁」はソフトレベルとしては存在しません。
Windows 8.1 Pro (x64) 環境ゲストです。 不評だった Windows 8 の後継として 2013 年に登場した OS です。 スタートボタンが復活したりもしましたが, そのわりにボタンをクリックして表示されるのは全画面なスタート画面のままと, ユーザーにしてみれば「それなら無いままのほうがマシ」と言いたくなる変更でしかなかったことから, 不評を払拭するには至らず, 早々に Windows 10 へ切り替わることとなりました。 (^^;)
「Windows 8/8.1 時代のタブレットを Windows 10 へアップグレードすると使い物にならなくなる」というケースが意外とあったことから, この OS に留めて使用しているユーザーも多かったりします。 (自身も その一人)
次の Windows 8 もそうなのですが, Windows 8/8.1 系の OS は, Modern UI 実装が影響してか Windows 7 までと Windows 10, つまり 8 系以外の OS と異なる挙動を示すことの多い点が, ソフト作成での難点となっています。 特にコモンダイアログ系において顕著で, 例えば UNLHA32.DLL が作成する自己解凍書庫においては, 設定したはずの初期値が画面表示までにクリアーされてしまう…といった現象が発生しています。
さらに, DLL 読み込みの脆弱性方面では「SetDefaultDllDirectories() API 実行などの影響で暗黙的ロードのできない DLL が発生すると, NTDLL.DLL が一般保護エラーを起こす」といった現象も発生していて, 安全性の意味でも むしろ Windows 7 辺りより状況の悪くなっているイメージを受けます。 その辺りもあって, 「呼び出される側のプログラム」である UNLHA32.DLL や UNARJ32.DLL などでは SetDefaultDllDirectories() を使用していません。
Windows 8 Pro (x64) 環境ゲストです。 Windows 7 の後継としてスマホやタブレットなどとの融合を目指して 2012 年に発売された OS です。 その過程で Modern UI や Store アプリが採用されもしましたが, スタートメニューの廃止などモバイル系デバイスを意識しすぎたことから大不評を買ってしまった経緯があります。
Windows 10 辺りでもそうですが, 個人的には「タッチパネルでの操作を重視したわりには, タッチパネルのみで完結できない手順の存在する, 何時まで経ってもキーボードとマウスの必須な操作体系」なのが最悪だと思っています。 (^^;)
Modern UI といえば, これに対応した Store アプリが Windows 10 では使えない…というのも凶悪ですね。 自身は 1000 円程度のアプリだったことから笑って済ませられる程度の被害で済んでいますが, 高額アプリを買った方だと「金を返せ!!」と (MS に) 言いたくなることでしょう。 (^^;) あと, 「画面分割で 2 つの Modern UI アプリを同時表示」とか謳っていましたが, あの MS-DOS 5.0 の分割画面にすら劣る画面のどこに宣伝効果が有るというのでしょうか? 甚だ疑問です。 (笑)
拙作ソフト的には個別対応は行っていませんが, 何か挙げるとすれば, この OS から それまでのバージョン取得の方法の通用しなくなった点でしょうか? それはともかく, この OS から色々と迷走…といいますか, おかしくなり始めた気がします。 ほんと, MS はモバイルが絡むと碌なことがない…といいますか, 昔も今もモバイル方面への対応能力がないベンダーだと言わざるを得ません。 (笑)
Windows 7 Professional (x64) 環境ゲストです。 Windows Vista の後継バージョンとして 2009 年に発売された, まだまだ主流の一つと言っても過言ではないだろう OS で, Windows NT としてのバージョンは 6.1 と, Windows 2000 (5.0) に対する Windows XP (5.1) と同様, 構造的な変更は比較的大きいものの, 基本的には改良版 Vista と言えるものになっています。
名前の由来は「Windows 1.0 から数えて 7 番目」と説明されていたりもしますが, 「1.x (Windows 1.0) → 2.x (Windows 2.0/286/386) → 3.x (Windows 3.0/3.1) → 4.x (Windows 95/98/98SE/Me) → 5.x (Windows 2000/XP) → 6.0 (Windows Vista) → 6.1 (Windows 7)」という数え方は, どう考えても おかしいでしょう。 わりと異なる 5.0 な Windows 2000 と 5.1 な XP を同列で扱っているくせに, 6.0 な Vista と 6.1 な Windows 7 を別勘定としているわけですから。 (笑)
Windows XP 同様安定した OS であることから根強い人気を誇っていて, サポートが終了する 2020 年 1 月まで使い続ける方も多いと予想されます。 自身も こちら (Windows 7) のほうが好みですね。 開発の関係上最新版を追い掛ける必要がありますので, ホストは Windows 10 へ上がっていますけれど…。
こちらは「純粋な環境」組の役目を担っていますので, Office すらインストールされていません。 ある意味それが問題となるケースも有りそうですが, それは他の Office インストール済み環境が担ってくれることでしょう。 ちなみに, 「純粋な環境」からは外れてしまいますが, ホストで動作しなくなった Parallels Workstation 6 と Windows Virtual PC だけはインストールする予定となっています。
拙作ソフト的には, DLL 読み込みの脆弱性方面で SSPICLI.DLL や APPHELP.DLL への対応といった個別対応を行っていますが, 今では この Windows 7 環境が対応の基本となっています。 Vista で始まった UAC (アカウント制御) も まともになり, 「Vista でやりたかった事が漸く完成された」といった感がありますね。
Windows 10 ほどではありませんが, この OS から本格的にシステム DLL が保護されるようになり, Vista までと異なり常に最新の DLL がシステムディレクトリーに配置される分 Side-by-Side アセンブリーへの対応も楽…と, 脆弱性方面の対処は随分楽になっています。 そういった意味では「Windows 7 以降のみ対応」とするのが吉かしら?
あと, 描画 (グラフィックドライバー) 方面では, Vista で変更された構成が Win 7 で またもや変更…と, ソフトによっては影響があるかもしれません。 拙作ソフトではプログレスバーなど一部コントロールでのメッセージ発出のタイミングくらいしか影響がありませんでしたけれども…。
Windows 7 Ultimate (x86) 環境ゲストです。 Win 7 系での一般環境を想定して前作メインの東芝 Satellite WXW/78DW を再現したような環境になっていて, VMware の Direct3D 方面のテスト環境も兼ねていることから, ゲーム系を含めて色々なソフトがインストールされています。 (笑) それはともかく, Win 7 も主要 OS 組…というわけで, x64 と x86 双方の環境を用意しています。 ちなみに, 最新の Windows 10 から この Windows 7 までは今でも実機が残っていて, そちらでのテストも可能となっています。
拙作ソフト的に個別対応等は行っていませんが, Windows 10 以上に x64 環境との差異が存在しますので, そういう意味でも専用環境を用意する必要があるのでした。 なので, Win 7 が主要 OS 組の座から落ちたとしても, x64 と x86 両方の環境が残り続けます。
そういえば, サーバー版 OS ではありますが「コンシューマー向けで使われたりもする」という意味で, Windows Home Server 2011 のゲストは用意しておいたほうが良いかもしれませんね。 近々試してみましょう。
これ以降は 32 ビット (x86) 環境のみとなります。 まずは Windows NT 系です:
Windows Vista Ultimate (x86) 環境ゲストです。 2007 年 (ボリュームライセンス版は 2006 年) に発売された, Windows XP の後継となる OS です。 インターフェイスを始めとして いろいろと刷新が図られましたが, 結果論としては ある意味過渡期といえそうな OS で, 次の Windows 7 で完成した感があります。
巷的には「Windows Me 並みに不安定」と言われたりもしましたが, 自身に限っていえば そこまで酷い状況に遭遇したことはありません。 職場のクライアント PC でも Vista の時代は ありましたが, 周り共々普通に使えていましたし…。 ちなみに実機も残っていますが, 東芝 dynabook SS 1610 90C/2 はまだしも, SHARP WILLCOM D4 は もはやテスト環境としては使えない気がします。 (笑)
この OS で最大の変更点は何と言っても WDDM ドライバーと Aero の実装で, それに伴いプログレスバーなど基本コントロールの挙動すら変わってしまい, 拙作ソフトでも色々と対処が必要になっています。 また, UAC が実装されたのも この OS からで, それに対応するためのマニフェスト追加なども行っています。
UAC といえば, マニフェストで制御し管理者権限を求められることのないソフトでは大丈夫なのですが, インストーラーなど逆に管理者権限を指定するケースや, システムによる自動判定で管理者権限での実行を強制された場合 (時には強制されなくとも。) には, NTDLL.DLL により KERNEL32.DLL が読み込まれる時点で APPHELP.DLL に対するハイジャックが成立してしまいます。 こと DLL 読み込みの脆弱性方面に限っていえば, 残念ながら Vista においては完全な対処が不可能です。
さらに, APPHELP.DLL が問題とならないケースでも, Windows XP や Vista では Side-by-Side アセンブリーで用意されたものよりも古い DLL がシステムディレクトリーに配置されていたりするため, 脆弱性への対応が難しくなっています。 可能なら Vista への対応を切ってしまうのが一番ですが, 不人気ながら意外と今でも使われているような気がします。 (^^;)
Windows XP Media Center Edition 2002 (x86) 環境ゲストです。 Windows XP は 2001 年に発売された Windows 系において長らく主流の座を占めていた OS で, Professional と Home という 2 つの主要エディションがあります。 Home はコンシューマー向けで普通に PC を買うと これのプリインストールされているケースが多いのに対して, 職場では Professional が使われます。 この 2 つ以外では当該環境の MCE 2002 や TPCE 2005 なども存在しますが, それらは Pro が基本となっています。
Windows 95 が登場した頃から Windows NT 系への統一と移行を目論んでいた MS ですが, 6 年前後の時を経て, この Win XP 登場により漸くその夢が果たされたことになります。
この OS 最大の特徴が, 角の丸いウィンドウや より立体的でカラフルになったタスクバーを始めとしたコントロールなど, 所謂スタイルの実装で, これを実現するために, 拙作ソフトでもマニフェストの組み込み…つまり Side-by-Side アセンブリーへの対応化が行われています。 さらに, ツールバーなどがイメージリストを使ったものへ変更されてもいます。
DLL 読み込みの脆弱性方面については, Windows XP までは OS 側で何も保護対策が施されていないことから, 対応不能のボロボロな状況です。 (笑)
ちなみに, この Win XP MCE 2002 ゲストが拙作ソフトの開発環境だったりします。 なので, 上述した Windows 7 Ultimate (x86) 環境以上に種々のソフトがインストールされていて, 左上画像をクリックして拡大すると判るのですが, ATOK すらインストールされている辺りが それを物語っています。 (笑) 逆に, ソフトをインストールしすぎたせいで, 開発環境にもかかわらず次で説明する Windows XP Home 環境と比べて少々不安定になってしまっています。 サウンド周りなので殆ど無視できる程度なのが救いかしら? (^^;)
Windows XP Home Edition (x86) 環境ゲストです。 コンシューマー向けの OS で Windows 9x 系後継としての役目を担っていたことから, 多少 Professional とは毛色が異なるものとなっています。 最大の違いが Win 9x と同じ「万人 (全てのアカウント) が管理者」という変態仕様で, 何のための NT 系 OS なのか ある意味解らない事態に陥っています。 (^^;)
コンシューマー向けだけあって こちらのほうが遥かに多く販売されたからなのか, Pro のほうが本来の姿である Win XP なのに「Home でないと使い物にならないソフト」が意外と多く, それが逆に職場…つまり Pro で使う障害となったりしました。
拙作ソフトでは特に Pro と Home の違いを想定した対応等は必要なかったのですが, テスト環境は必要…というわけで当該環境が用意されています。
一昔前までは もう 1 つ Pro の英語版を使っていたのですが, その環境でのテストを必要とする拙作主要ソフトが Unicode 版となりテストを必要としなくなったことから, 今では使われていません。 手元にある HDD の いずれかに残っているはずなので, 機会があったら使ってみることにしましょう。
それとは別に x64 版 Pro も復活させたほうが良いかしら? 何しろ「クライアント用なのに OS 自体はサーバー版。 ソフトもサーバー版が必要」という変態仕様で, 専用の対策が必要ですから。 (^^;)
Windows 2000 Professional (x86) 環境ゲストです。 2000 年に発売された Windows XP の一つ前の OS で, Win XP は これの発展系といえます。 (実際 Win2k/XP の内部バージョンは 5.0/5.1 となっています。) Win XP が登場して随分経った頃でも (特に職場では) 意外と こちらが使われていたりもしました。
元々 MS が Win2k で Windows NT 系への統一を目指していたこともあって, Win2k には Win9x 系である Windows 98 の機能も取り込まれていたことから, MS が目論んだほどでは無かったものの, この辺りで Win 9x 系から乗り換えたユーザーも多くいました。 自身も Win2k で NT 系へ乗り換えたクチです。
コモンダイアログなどが この OS で改版されたことから, 拙作ソフトでも その辺りへの対応が行われています。
Win 9x 系のソフトを そのまま動かすのに この OS が便利だったことから, ゲーム方面を含めて このゲスト環境にも意外と多くのソフトがインストールされていたりします。 唯一残念だったのは, VMware との相性が悪くて YAMAHA S-YXG 100 Plus といったソフトウェア MIDI が動作しなかったことですね。
Windows NT Workstation 4.0 (x86) 環境ゲストです。 1996 年に発売された, Windows 2000 の一つ前の OS です。 Windows NT 系で初めて Explorer など Win 9x と同じ操作体系が採用されもしましたが, 当時は まだまだ使い分けが はっきりしていて, 個人ユーザーが使うことは あまりありませんでした。
Windows NT 3.51 とは, ちょうど Win2k に対する Windows XP と似たような関係にあって, 基本的にはシェルを一新した NT 3.51 の改良版 OS と言えるものになっています。 (実際, 開発段階では 3.52 というバージョンでした。)
拙作くらいの小さなソフトでは Win2k や Win9x 辺りに対応しておけば違いを気にする必要がなかったことから, この OS への個別対応は行っていません。
Windows NT Workstation 3.51 (x86) 環境ゲストです。 1995 年に英語版が発売された Windows NT 4.0 の一つ前の OS で, API 体系としては Windows 95 のものを取り込んでいたものの, この OS までは Windows 3.1 と同じ操作体系でした。 安定動作していたことから, NT 4.0 よりも こちらを好んで使用していたユーザーも多かった経緯があります。
0.01 大きいだけのバージョンナンバーで実際マイナーチェンジではあったのですが, Windows NT 3.5 とは結構差のある OS となっていて, NT 3.51 で動いても NT 3.5 では動作しないというソフトも意外と多くありました。 今にして思えば, Win 95 系 API の有無が影響していたのかもしれませんね。
拙作ソフトでは, Windows 3.1 時代と同じ旧形態のコモンダイアログへの対応や NT 4.0 以降でしか実装されていないコモンコントロールと同じ機能を持つダミークラスの作成…といった対応が行われています。
実は このゲスト環境…, ハイカラーでのテストを行うために「VMware の Windows XP MCE 2002 ゲスト上にインストールされた Virtual PC 2007 SP1 の Win NT 3.51 環境」…つまり孫ゲスト環境だったりします。 (笑)
…と, ここまでが Windows NT 系の環境で, Win32 API としては Unicode 版が本家の, むしろ「ANSI 版も使える」といった形態の OS となっています。 今では LHMelt や UNLHA32.DLL も Unicode 版なので, そういった意味では Windows 9x 系より こちらのほうが日本語関連で問題の発生する確率は小さくなっています。
さて, 次は Windows 9x 系の環境です。 Win32 API が実装されているものの OS 自体は 16 ビット版なので, そこから来る制限が どうしても付きまといます。 また, ANSI 版 API だけなので, 日本語版と他言語版の間で文字コードの問題が発生したりと, その方面への対応も必要となるのでした。 以降は 32 ビット環境のみ…どころか, 32 ビットでさえない環境ばかりですので, "x86" の表記は省略します:
Windows Millennium Edition 環境ゲストです。 2000 年に発売された Windows 9x 系最後の OS です。 Windows 95 バカ売れの余波で ここまで Win9x 系が使われ続けてきましたが, いろいろ詰め込みすぎたせいで この OS が (特に日本語版では) 相当不安定になってしまい, Windows XP への移行に拍車の掛かってしまった感があります。 Windows 2000 での Windows NT 系への統合を断念したのに伴い, 半ば予定外に開発・発売が行われた…といった辺りも一因となっていることでしょう。
NT 系のみとなって 15 年以上経ちますが, 業務用独自開発ソフトやゲームなどを動作させるために, 意外と この辺りの OS が稼働している PC も残っているような気がします。
拙作ソフトでは NT 系と Win9x 系という違いはありますが, 処理としては むしろ Windows 2000 に近いものとなっています。 さすがは同じ年に登場した Win2k (Ver 5.0) と Win Me (Ver 4.9) といったところでしょうか? (^^;)
ここからは これ以降で説明する環境を含めた Windows 9x 系全てに該当する話です。
上述したように Windows 9x 系の Win32 API には Unicode 版が存在せず ANSI 版のみとなっています。 Win32s とも異なるので Win32c ('c' は Windows 95 の開発コード名 "Chicago" から来ているとか "Consumer" の 'c' だとか言われています。) と呼ばれたりもするのですが, 兎にも角にも ANSI 版しか用意されていないので, Unicode 版のソフトを動作させることは出来ません。
一方, LHMelt や UNLHA32.DLL などは昔はともかく今では Unicode 版となっています。 つまり本来であれば Win 9x 系で動作しないことになります。 なので, これらのソフトでは「Unicode←→ANSI の変換を行った上で ANSI 版 API を呼び出すダミーの Unicode 版 API」を内部的にもつことで Win9x 系でも動作するようになっているのでした。 コンパイラーのランタイムが Unicode 版 API を使用しているとアウトなので, ランタイムすらメモリー関係や初期化ルーチンなど最低限のものに使用を留めてあります。 (笑)
その上, 時刻関係など Windows XP 辺りの段階ですらバグの仕込まれている API が存在することから, 一部については API すら信用せず自前でルーチンを拵えています。 …と, 手間だけは やたらと掛かっていますが, やっていることは大したことのない単純作業ばかりです。 (^^;)
さらに, 16 ビット版 OS は 32 ビット版以降と異なりプリエンプティブなマルチタスクではありませんので, メッセージループを回す…なんてこともやっています。 もっとも, こちらの処理は「元々必要だったものが後々必要なくなった」パターンで手間は掛かっていませんけれども…。
Windows 98 Second Edition 環境ゲストです。 1999 年に発売された, マルチメディア強化版 Windows 98 といった感じの OS で, DVD-ROM への対応や IE 5.0 の同梱などが行われています。 Windows 9x 系では この辺り (Win98SE や Win98SP1) が一番安定していた気がします。
この OS で基本機能が出揃ったといえることから, Win9x 系がバッサリ切られるまでは, Win98SE 以降を要求するソフトの多かった経緯があります。 今では Windows XP や 2000…どころか Windows 7 以降を要求するソフトが普通になっていますね。 (^^;)
この頃の Win9x 系 OS は複数同時に使用していると ぱっと見で区別しづらいところがあることから, 壁紙で どの OS か判るようにしてあったりします。 Windows 98 系は親の再婚パターンな義妹キャラ。 15 年以上も前に行ったお遊びですが, 未だにそのまま。 (笑)
Windows 98 (SP1) 環境ゲストです。 1998 年に発売された Windows 95 の後継 OS で, FAT32 や USB に対応している辺りは Windows 95 OSR 2.5 と同じです。 この OS で漸く Win9x 系が完成 (といいますか一段落) の域へ達した感があります。
後継の Windows Me が不安定だったことから, わざわざ この OS へダウングレードして使っているユーザーも多くいました。 実機はともかく, VMware や VirtualBox のゲスト環境上では, ゲーム目的などで今でも意外と稼働しているような気がします。
そういえば, 「Windows 98 SE よりも こちら (SP1) のほうが安定している」といった話も当時多く聞こえてきましたが, 自身に限っては実機・仮想共々 SE のほうが今でも安定しています。
Windows 95 OSR 2.5 環境ゲストです。 SHOP などで箱買いされた普通の Windows 95 と異なり, こちらはプリインストールを前提とした OEM 版です。 微妙に改良が加わっていることから, Win95 と OSR とを (Windows 98 と SE 程度の) 別物として見なされることもあります。
OSR 2.0 (DMA, FAT32 対応など) / 2.1 (AGP 対応など) / 2.5 (IE 4.0 同梱など)…と, 大きく分けて 3 つの版がありますが, 場合によっては この 3 つを区別しないといけないことも…。 幸い拙作ソフトでは そのような区別は必要ありませんでした。
拙作ソフトに関しては, 98 以降にしか存在しない (しかも Win NT 系対応ソフト的には必須な) API が存在することから, そのダミー API を用意する…といった対応が行われています。
Win95 系の壁紙は「日本史担当の教育実習生…ならぬ, 幼なじみ Part 2 なお姉さんキャラ」が採用されています。 (笑)
Windows 95 (OSR 1.0) 環境ゲストです。 LHMelt の表示しているバージョン表記が次で説明する Win95 と同じで, OS 的にも同じ扱いを受けるのが普通ですが, こちらは OSR 1.0 に当たる OEM 版です。 ツールボタンなどのデザインが OSR 2.x や Windows 98 と同じ…といった辺りで見た目でも区別が可能です。
OEM 版ではありますが OSR 2.x と異なり最初期のものなので, よほど PC ベンダーが特殊なものを組み込むなどしていない限り, 箱売りの Windows 95 と区別する必要はありません。 そういった意味では この環境を用意する必要は本来ないのですが, Internet Explorer の違いによりシステム挙動に変化が生じることから, その方面を確かめるために用意されています。
Windows 95 (SP1) 環境ゲストです。 上の OSR 1.0 と異なり, こちらは SHOP で箱売りされていたもので, 1995 年に発売された Windows 9x 系最初の OS です。 Windows 3.1 から Windows NT 系 (といいますか 32 ビット版 OS) への移行を促すことを目的として作られた OS ですが, これがバカ売れしてしまったおかげで, 真の移行 (と統合) は Windows XP の登場まで持ち越しとなってしまいました。
NT 系と異なり MS-DOS 及び Win 3.1 との互換性が至上命題となっていたために, MS-DOS 7.0 + Windows 4.0 という (DOS + Win の) 構造すら再現されていて, MS-DOS 7.0 + Windows 3.1, MS-DOS 6.2/V + Windows 4.0 といった使用法も可能でした。 (行う意味はありませんけれど。) 反対に, 互換性維持のために いろいろ足かせ (制限) が掛かってしまい, それが後に Windows Me で破綻を来す原因ともなりました。
「極力発売当初の環境を再現」する役目を担ったゲストで, Internet Explorer 2.0 に留めてあったりします。 その辺りもあって, 画像をクリックして拡大すると判るのですが, Explorer の実装された Win 9x でも, 最初はツールバーのボタンが ちゃんとボタンのデザインだったことが分かります。 (笑)
Windows 9x 系に続いては Windows 3.1 系…もはや Win32 API すら実装されていません。 (笑):
MS-DOS 6.2/V + 日本語版 Windows 3.1 環境ゲストです。 Windows 3.1 は (日本語版では) 1993 年に発売された Windows 3.0 (91 年) の改良版 OS です。 OS として説明されるのが普通ですが, 最初 (Windows 1.0) は MS-DOS 上の GUI モジュールとして出発していて, いろいろと OS 的な仕事をこなすようになった 3.1 でも本質は変わっていません。
当時としては結構使えるものだったことから, Windows NT 系への移行が なかなか進まず, 打開策として Windows 95 が登場することとなりました。
一方の MS-DOS ですが, 「MS-DOS」と聞くととても古い印象を受け, MS-DOS 3.x 辺りで 1984 年と確かに古いのですが, 6.2/V に限れば Windows 3.1 と同じ 1993 年に発売されています。 昔は PC を起動しても Win が立ち上がることはなく, これ (MS-DOS) だけが起動しました。 (^^;) MS-DOS 3.x の頃までは日本語版と英語版は別物だったのですが, MS-DOS 5.0 や MS-DOS 6.2/V の頃では (PC/AT 用については) 英語版の上に日本語用のモジュールを適用する形態となっています。
Windows 3.1 は純粋な 16 ビット版 OS のため Win32 API 自体が実装されていません。 そのような Win 3.1 上で Windows NT / Windows 95 系のプログラムを動作させるためのモジュールが Win32s です。 とはいうものの, かなり強い制限があることから, Win32s を意識して作られていないと実際には動作しないのが普通です。
先に書いたとおり, 未だに この環境が使われているのか, 要望・動作報告等が国外から上がってきます。 (笑)
Windows 95 以降で当たり前のように存在する Win32 API であっても, その中の意外と多くが Win32s には実装されていないことから, 拙作ソフトでは同じ機能をもったダミー API が内部的に実装されています。 さらに, ツールバーやステータスバーなど Windows 95 以降で普通に使われているコモンコントロールも存在しないことから, これまた同じ仕様を備えた (ただし必要な機能のみを用意したサブセットな) ウィンドウクラスを自前で拵えていたりします。 (^^;)
あと, 個々の API と それを担当している DLL の体系が Windows NT / Windows 9x 系 OS と全く異なるので, LoadLibrary() + GetProcAddress() による DLL の遅延ロード化には少々苦労しました…主に手間的に。 (笑)
…と, やっていることは大したことがなくとも手間だけは掛けているので, Win32s 上でも拙作ソフトが見た目も同様に動作しているわけですが, 逆に考えると, 文字列変換など必要最低限なもののみとはいえ Unicode 版 API が備わっていることで, Windows 10 にも対応した Unicode 版の拙作ソフトが動作し, OLE2 によるドラッグ&ドロップまで使える Win32s は本当に凄いと唸らざるを得ません。 (^^;)
反対に, この環境へ対応するために拙作ソフトでは Windows 3.1 時代の遺物ともいえる DDE すら使っているのですが, いくら OLE2 が その発展系だとはいえ, それが最新の Windows 10 (x64) でも機能するというのは, これまた凄いことだと思います。
ちなみに, この環境も「VMware の Windows XP MCE 2002 ゲスト上にインストールされた Virtual PC 2007 SP1 の Win 3.1環境」な孫ゲスト環境だったりします。 なのでハイカラーと判るように「義妹の幼なじみな お嬢様」が壁紙になっています。 (笑)
最後を締めくくるのは Linux 系…ついには Windows ですらなくなってしまいました (爆):
Ubuntu 16.04 LTS 環境ゲストです。 Linux という用語は, Linus Torvalds 氏により開発が始められたカーネル (linux カーネル) をもつ, 一連の UNIX 互換 OS を指して使われます。 本来 Linux とは根底であるカーネルのみを指す用語なのですが, 一般的にはシェルや X Window System などを始めとした様々なソフトが付加されたディストリビューション全体を指して使われることが多くなっています。
Windows とは全く異なる OS なので当然ながら Windows 用のソフトは使えないわけなのですが, Wine という Linux 上で Windows NT / Windows 9x 系プログラムを動作させるための Windows レイヤーをインストールすると, Windows 用ソフトの使用が可能となります。
PC エミュレーターのシームレス表示機能と見かけは似ていますが, Wine が Win32 API を始めとした各種 API やコントロールの動作を肩代わりすることにより, プログラム自体は X Window System 上で直接動作しています。 そういった意味では Win32 API インタープリターと言えるものになっています。
Wine 1.0 より前の頃は製品版 Windows のモジュールを必要としましたが, 今では Wine 単体でも結構安定して Win 系のソフトを動作させることが可能となっています。 とはいうものの, コモンダイアログ系など対応の不十分な部分も多く, やはり Wine を意識して作られていないと正常動作しないのが実情で, 拙作ソフトでも色々と対応コードが追加されています。
ここでは「ちゃんと Win なソフトが動くんだよ~」という意味で DirectX 9.0c な Direct3D の必要な『千の刃濤、桃花染の皇姫』の体験版にも御登場願っています。 (笑) さすがに 3D バリバリなゲームまではゲスト上では無理です。 (^^;)
…と, 全てゲストといっても過言ではありませんが, 一応常時 20 以上の環境でテストを行っています。 実機を合わせると軽く 30 を超えてしまいますので, 「メンテが~メンテが~」と Twitter 辺りで頻繁に呟く事態となっているのでした。 (笑)
Jun.11,2018 追記
孫環境な NT 3.51 や Win32s 環境について「どういうことなの?」といった質問メールが昔も今も飛んできますので, これまでも何度か書いていますが, 今回も書いておきます。
それぞれの箇所で書いているように, 例えば Win32s 環境であれば, 当該環境は:
- ホスト:Windows 10 1803 (x64)
使用ソフト:VMware Workstation 12.5 Pro
- ゲスト:Windows XP MCE 2002 (x86)
使用ソフト:Virtual PC 2007 SP1
- 孫ゲスト:MS-DOS 6.2/V + Windows 3.1 + Win32s Ver 1.25
といった構造になっていて, Virtual PC の全画面表示を解けば:
見てのとおり孫環境であることが はっきりします。 (笑)
なぜ比較的新しい Windows 7 ゲスト辺りではなく古い Windows XP 環境を使っているのかですが, 1 CPU 環境でないと Virtual PC の NT 3.51 ゲストが正常動作しないからなのでした。 これは Windows Virtual PC でも同じで, 逆に VMware の Windows 7 ゲストは論理物理の別に関係なく 2 CPU 以上でないとプチフリーズが発生して半分使い物にならない…という制限があることから, 当該ゲスト上で孫環境を構築することは出来ないのです。
|