Win 7プラットフォームの開発における互換性

5791 ワード

1.GetVersion関数の使用は避ける
Windows 7とWindows Server 2008 R 2の内部バージョン番号は6.1です.
バージョンチェックはなるべく「<」で代用!=をクリックします.これにより、更新されたバージョンのオペレーティングシステムでアプリケーションを実行できます.最低要件は、サポートされているオペレーティングシステムのバージョン番号が最低以上であることです.
C++
a.GetVersionExでバージョン番号を取得して判断する
OSVERSIONINFO osvi;

BOOL bIsWindowsXPorLater;

ZeroMemory(&osvi, sizeof(OSVERSIONINFO));

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx(&osvi);

bIsWindowsXPorLater = ( (osvi.dwMajorVersion > 5) ||



                      ( (osvi.dwMajorVersion == 5) && (osvi.dwMinorVersion >= 1) ));

 
 
b.VerifyVersionInfoによる直接検出
 
OSVERSIONINFOEX osvi;

BOOL bIsWindowsXPorLater;

DWORDLONG dwlConditionMask = 0;

int op=VER_GREATER_EQUAL;

ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));

osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

osvi.dwMajorVersion = 5;

osvi.dwMinorVersion = 1;

osvi.wServicePackMajor = 2;

osvi.wServicePackMinor = 0;



VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, op );

VER_SET_CONDITION( dwlConditionMask, VER_MINORVERSION, op );

VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMAJOR, op );

VER_SET_CONDITION( dwlConditionMask, VER_SERVICEPACKMINOR, op );



bIsWindowsXPorLater = VerifyVersionInfo(



                      &osvi, 



                      VER_MAJORVERSION | VER_MINORVERSION | 



                      VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR,



                      dwlConditionMask);

 
            C#
if (Environment.OSVersion.Version < new Version(5, 1))



{



       MessageBox.Show("Windows XP or later required.",



              "Incompatible Operating System", MessageBoxButtons.OK,



              MessageBoxIcon.Error);



       return;



}

 
ある機能が異なるプラットフォームで異なる場合、アプリケーションはオペレーティングシステムのバージョンチェックを実行するべきではありません.特定の機能が必要な場合は、機能が見つからない場合にのみ失敗する機能を探してみたほうがいいです.
C++
GetProcAddress()を使用して、関数が存在するかどうかを判断します.
 
C#
try{

  FunctioninHighVersion();

}

catch (EntryPointNotFoundException)

{

  FunctioninLowVersion();

}

 
2.Win 7はWindows MailとWindows Movie Makerをサポートしなくなった
 
3.win 7はMicrosoft Agentをサポートしていません
Microsoft Agentは、マイクロソフトのウィンドウプラットフォームに基づいたプログラマブルなインスタントインタラクティブアニメーションキャラクタです.開発者は、この役割をアシスタントとして紹介したり、ガイドしたり、エンターテインメントしたり、Webサイトやアプリケーションのインタラクティブな開発を強化する手段として使用することができます.Microsoftエージェントは、プログラマーとWebサイト開発者がより人間的なユーザーインタフェースを設計できるようにします.キーボードとマウスの入力を受け入れることができるほか、Microsoft Agentはユーザーの音声コマンドを理解することができ、アニメーションキャラクタはユーザーの標準音声コマンドに基づいて音声、録音、テキストボックスを同期させることで対応するフィードバックを行うことができます.
Win 7ではMicrosoft Agentはサポートされていませんが、この機能をサポートするためにマイクロソフトの公式サイトに修復パッチをダウンロードすることができます.
 
4.Tridentを使用してIEバージョンを判断する
IE 8以降で互換モードを使用すると、user-agentのversion tokenに互換バージョンが表示されます.この場合、TridentによってIEのバージョンを判断する必要があります.
例えばIE 8は、互換モードを使用しない場合はversion tokenがMSIE 8.0、IE 7と互換性がある場合はversion tokenがMSIE 7.0となるが、現在のIEがIE 8であることを示すTrident/4.0文字列が付加され、Trident/5.0がIE 9、Trident/6.0がIE 10に対応する
 
5.レジストリ反射機構を除去
Windows Server 2008、Windows Vista、Windows Server 2003、およびWindows XPシステムは、32ビットと64ビットのレジストリを同期させるために反射メカニズムを使用します.しかし、Windows 7とWindows Server 2008 R 2から、MSはレジストリ反射を除去し、反射キーを組み込んだ.
 
6.MSMQデフォルトでSHA-2署名を使用
これにより、Win 7と低バージョンのMSMQの互換性がなくなります.
 
7.UACデータリダイレクト
アプリケーションがシステムディレクトリまたはレジストリに書き込みを行う必要があるが、適切な権限がない場合、UACデータリダイレクトは仮想化されたパスにデータを書き込み、他のユーザーに切り替えたり、UACを起動または禁止したりすると、以前に書き込まれたデータにアクセスできなくなります.
したがって、アプリケーションを開発する際には、敏感なシステム領域を書き込むのではなく、管理者権限ではなく標準ユーザーの権限で実行することを常に考慮する必要があります.
システムディレクトリまたは特別な権限が必要な場所に書き込む必要がある場合は、アプリケーションが実行中に管理者権限を取得できるように、プロジェクトをrequireAdministratorに設定できます.
 
 
 
アプリケーション互換性キット(ACT)5.5
http://www.microsoft.com/en-us/download/details.aspx?id=7352