CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発 雑感

VCランタイムがインストールされているかどうかをチェックする方法

投稿日:

VCランタイムとは、プログラム一覧でこんな名前のものを言う。
Microsoft Visual C++ 2015-2022 Redistributable (x64) – 14.40.33810
VC++で組んだプログラム(共有DLLでMFCを使う)を動作させるのに必要。
マイクロソフトのサイトから、X64用のバイナリを指定すれあばVC_redist.x64.exeが入手できる。
正式名称は、Microsoft Visual C++ 再頒布可能パッケージ。
(x86用のモノもあるが、イマドキ32bitアプリもないよなってことで序盤の説明からは除外する。)

まずは結論から書く。
このVCランタイムがインストールされているかどうかをチェックするには、レジストリをチェックすればよい。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64
以下すべてDWORD値で、インストール済みの状態。
Installed=1
Major=14
Minor=40
Bld=33810

VCランタイムがアンインストールされると、キーx64配下が消える。ただし、VisualStudioがインストールされた環境では消えないというややメンドウな動きになるが、アプリ開発者にとって開発環境での動作はそれほど重要ではないので消えるという結論でよいだろう。

気を付けなければいけないのは、HKEY_LOCAL_MACHINE\SOFTWAREがリダイレクトされる場合があること。
64bitOSで32bitアプリからレジストリ確認した場合に、WOW6432Nodeという場所に飛ばされるという罠。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64

普通にx64用のプログラムからレジストリチェックしていればこの罠にははまらないが、いやいや意識せずに32bitアプリを使っていることがあって、その代表がInstallShieldのスクリプトからチェックしている場合。VCランタイムをインストールするのはインストーラというのが相場が決まっており、IstallShieldで作ったインストーラが32bitというのがよくある。最新のIstallShieldのことは知らんが、おいらが使っている2012はまちがいなく32bitアプリとして動作している。

勝手にリダイレクトされないための処理はこんな感じ。
InstallShieldのスクリプトの場合。事前処理と事後処理あり。

if ( bX64 ) then
	Disable( SELFREGISTERBATCH );
	REGDB_OPTIONS = REGDB_OPTIONS | REGDB_OPTION_WOW64_64KEY;
endif;

// ここでレジストリチェック

if ( bX64 ) then
	Enable( SELFREGISTERBATCH );
	REGDB_OPTIONS = REGDB_OPTIONS & ~REGDB_OPTION_WOW64_64KEY;
endif;

32bitアプリの場合。キーを開くときにKEY_WOW64_64KEYを指定するのがポイント。

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0, KEY_READ|KEY_WOW64_64KEY, &hKey) != ERROR_SUCCESS)
	return FALSE;

最後に、32ビット用のラインタイムについても触れておく。
Microsoft Visual C++ 2015-2022 Redistributable (x86) – 14.40.33810
VC_redist.x86.exe
32bitアプリを動かすためのランタイムなので、レジストリは32bit用になる。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86

このあたりのレジストリを見ていると、以下のキーがあることもわかる。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64
これが第2の罠で、64bit用のランタイムはリダイレクトされた側にもレジストリが登録されること。へー気が利いているじゃんと思えるが、ランタイムをアンインストールした場合には、リダイレクトされた側のレジストリが消えない。インストール時に登録するんだったら、アンインストール時に消すのが作法。リダイレクト側だけに着目している人にとっては、アンインストール時にキーが消えないというバグに見える。リダイレクト前のレジストリが正しいということに気付けばいいんだけどね。

-ソフト開発, 雑感

執筆者:


comment

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

関連記事

PDFアレコレで画面の拡大・縮小・移動ができるようにした

PDFアレコレをバージョンアップ。約4か月ぶり。 Ver3.05 2021/6/20 ・PDFの描画位置を左右上下にセンタリングするようにした(以前は左上)。 ・Ctrl+マウスホイール上下操作によっ …

PDFへのなんちゃって捺印ではつまらんのでデジタル署名とタイムスタンプを付けてみることを検討中

PDFアレコレで捺印できるようにしたのはいいけど、しょせんはなんちゃって捺印。だって、好きな印影が作れてヒョっと捺印できちゃうわけで、なりすましができてしまうから。そんなこと言ったら、アナログな印鑑だ …

no image

家探し

家探し2戦で2敗だった。 横浜にくり出して、アタリを付けていた物件を不動産屋の人の案内で 見て回っているあいだに、本命物件を他の人にとられしまった。 今まさに契約書に記入しようとしたところで、住む気マ …

no image

マイナンバーカードを受け取ったけど、こりゃたいへんだ

先週たまたま代休とったからマイナンバーカードを受け取れたんだけれども、基本平日の昼間にに役所などに出向かなければいけないこの受け取り制度で国民全員が受け取れるわけがないと懸念している。急に平日に休みが …

沈みかけた船から逃げる準備が必要

魅力がなくなったら逃げ出した方がいい。25年もそこにいたから説得力ないけど、いよいよヤバい感じがしてきた。ヤバいよヤバいよサギなのかもしれないけど。。