アプリケーションが依存する sys ファイルを静的に識別するにはどうすればよいですか?

アプリケーションが依存する sys ファイルを静的に識別するにはどうすればよいですか?

レガシー オペレーティング システム (XP など) からのアプリケーションの移行を支援するには、アプリケーションの実行に必要なドライバー (sys) ファイルを特定する必要があります。これは、インストーラーを実行せず、アプリケーションを実行せずに、アプリケーションがインストールされている既存のシステムを検査することによって行う必要があります。

完璧な解決策ではありませんが、考慮する sys ファイルの数を絞り込むために、すぐに使用できるドライバー (オペレーティング システムのインストール後に追加されたドライバー) を識別する試みがなされました。DISM API はドライバーの受信トレイ ステータスを返すことができますが、これには Windows 7 以降が必要です。

これまでのところ、XP では信頼できる解決策が回避可能であることが証明されています。NTFS タイムスタンプ メタデータ (例: Changed) を照会すると、オペレーティング システムのインストール後にファイル システムに追加された sys ファイルを特定できる可能性があります。成功したとしても、これは調査範囲を狭めるだけで、アプリケーションが依存するドライバーを実際に特定するものではありません。

同様の質問をしたことがあるここ

では、アプリケーションが依存する sys ファイルを静的に識別するにはどうすればよいでしょうか?

答え1

これは誤解です。プログラムが.sysファイルやドライバーに「依存」しているわけではありません。依存しているのはオペレーティング システムだけであり、オペレーティング システムは適切と思われるモジュールを使用します。

たとえば、プログラムが印刷を行う場合、そのプログラムは、プログラムが開発されたコンピューター上のプリンター ドライバーに依存しません。別のコンピューター、別のオペレーティング システム、または別のプリンターでは、別のドライバーが使用されます。

他の投稿では、 依存関係ウォーカーは、プログラムが呼び出す DLL を示します。ターゲット コンピューターでは、これらの DLL のいずれかのバージョンが使用可能であることを確認する必要があります。

などの一部の DLL はkernel32.dllWindows の不可欠な部分であり、どのバージョンの Windows でも存在します。

たとえば、.Net Framework や C/C++ ランタイムに関連するその他の DLL は、ターゲット コンピューターにインストールされている場合とインストールされていない場合があり、適切なバージョンをインストールする必要もあります。

.Net Framework は下位互換性があり、より上位のバージョンはより下位のバージョンでコンパイルされたプログラムでも動作しますが、C/C++ ランタイムには正確なバージョンが必要なので、製品とともに DLL を配布する必要がある場合があります。

これを表す用語が作られています:DLL 地獄これはまったく適切なことです。開発者として、この地獄を最小限に抑えるためには、できるだけ多くの環境で分散ソフトウェアをテストする必要があります。しかし、遅かれ早かれこれに遭遇することは間違いありません。

関連情報