2012-01-11 7 views

答えて

4

Windowsは、互換モードで実行されているときに、アプリケーションにどのような影響を与えますか?

これは、古い動作やバグを模倣するいくつかの互換性シムを挿入します。場合によってはこれが必要な場合があります。プログラムの動作のいくつかは、これまで修正されていた古いバグに依存します。文書化されていない機能を使用していました。

ジョエルのブログエントリ、How Microsoft Lost the API Warはその良い例を与える:

私が最初に彼のアプリケーションで重要なバグがあったことを私に言った大ヒットゲームシムシティの開発者の一人、からこの話を聞きましたそれは、メモリを解放した直後にメモリを使用しました.DOSでは正常に動作するようになったが、解放されたメモリが別の実行中のアプリケーションによって即座に奪取される可能性が高いWindowsでは動作しませんでした。 Windowsチームのテスト担当者は、さまざまな一般的なアプリケーションを使ってテストを行い、正常に動作することを確認しましたが、SimCityはクラッシュし続けました。彼らはこれをWindows開発者に報告しました。SimCityを分解してデバッガで処理し、バグを発見し、SimCityが実行されているかどうかを確認する特別なコードを追加しました。それを解放した後でもメモリを使用することができます。

シムとの互換性があります。従来の動作を挿入します。別のバージョンのWindowsを報告するかどうか。特定のAPI動作を別の方法にする。 Aeroのような問題を引き起こす可能性のあるWindowsの他の機能を無効にすることができます。

シムの技術的な詳細はhereです。

シムインフラストラクチャは、アプリケーションプログラミングインターフェイス(API)フックのフォームを実装しています。具体的には、WindowsのAPI呼び出しをシム自体の代替コードにリダイレクトするためにリンクの性質を活用しています。 Windowsポータブル実行可能ファイル(PE)および共通オブジェクトファイル形式(COFF)仕様にはいくつかのヘッダーが含まれています。このヘッダーのデータディレクトリは、アプリケーションとリンクされたファイル間の間接レイヤーを提供します。外部バイナリファイルへの呼び出しは、インポートアドレステーブル(IAT)を介して行われます。

私は.NETの互換モードの設定を検出することができます方法はありますか?

質問Is a Program Running in Compatibility Modeは適切な答えを与えるようです。

関連する問題