プログラムが互換モードで実行しているかの判定

解決


ぽむぽむ  2009-08-26 03:18:45  No: 35497

Windows 7 が出ると言うことで、OSのバージョンを判断してみようと思い
主に、dekoさんのページ( http://homepage1.nifty.com/ht_deko/tech002.html/ )
を参考にしていたわけですが、次の問題が出てきました。

Vista, 7 で、Windows Server 2003, 2008 の互換モードで動作させると、
OSVerInfoEx.wProductType = VER_NT_WORKSTATION(=1) になってしまいます。

VER_NT_DOMAIN_CONTROLLER(=2), VER_NT_SERVER(=3) を期待したわけですが、
返ってきてくれないのです。
かといって、Server 2003, 2008 が手元にないので、実機で検証できません。

Window Server 2008 評価版 がダウンロードできそうなので、ダウンロードして
検証してみたいと思いますが、上記についてなにか情報をお持ちの方は、いませんか?

興味があるだけで、厳密にOSのバージョンで動作の変わるプログラムを
作るわけではありません。

OSVerInfoEx.wProductType って、互換モード関係なく、自OSの状態を返す
だけっだたりして・・・。


ぽむぽむ  2009-08-26 22:53:35  No: 35498

Windows XP SP3
Windows Vsita Ultimate
Windows Server 2008
Windows Seven Ultimate
上記の各OSで互換モードで確認したところ
OSVersionInfo で取得できる範囲では、互換モードで指定したOS
(98/ME は、98SEでしたが)相応の値が返ってきますが、
OSVersionInfoEx.wSuiteMask, wProductType は、使用中のOSの
値がそのまま返ってくるようです。

引き続き互換モードについて調査した結果以下のページをみつけました。
http://journal.mycom.co.jp/column/winvista/011/

互換モードに関する情報は、下記に保存されている。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_LOCAL_MACHINE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

ここに文字列値を作成し、名前にフルパスを入力。
データとして、WIN95、WIN2000 を記述しておくことで、互換モードで実行するようになる。

HKEY_CURRENT_USER のほうは、各ユーザーの設定で、HKEY_LOCAL_MACHINEは、
全てのユーザーの設定になり、当然全てのユーザーの設定が優先。

レジストリを直接編集して、「WIN95 WIN98 WINXPSP3」のように複数のバージョンを
書き込むと、たぶんデータ値の文字列順。
VISTA    < Server2003  < Server2008  < XP
VSITA*** < WINSRV03SP1 < WINSRV08SP1 < WINXPSP*

Windows 7 では、以下が設定可能

WIN95       Windows 95互換
WIN98       Windows 98/Me互換モード
NT4SP5      Windows NT 4.0(サービスパック5)互換
WIN2000     Windows 2000 互換
WINXPSP2    Windows XP(サービスパック2) 互換
WINXPSP3    Windows XP(サービスパック3) 互換
WINSRV03SP1 Windows Server 2003(サービスパック1) 互換
WINSRV08SP1 Windows Server 2008(サービスパック1) 互換
VISTARTM    Windows Vsita 互換
VISTASP1    Windows Vsita (サービスパック1) 互換
VISTASP2    Windows Vsita (サービスパック2) 互換

レジストリを見てやれば、とりあえずは互換モードがわかるようなので、
これで解決とします。

きれいにまとめて、資料として残しておきたい・・・。


ぽむぽむ  2009-08-27 00:42:52  No: 35499

解決忘れです


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加