web-dev-qa-db-ja.com

VS2017およびWin7 / XPで「api-ms-win-core-rtlsupport-l1-2-0.dll」が見つからない

VS2015からVS2017にいくつかのプログラムを移植した後、バイナリがWindows 7またはWindows XP- have v141_xpツールセットでコンパイルされました。プログラムは、DLL api-ms-win-core-rtlsupport-l1-2-0.dll2に注意)がないため、起動に失敗します。

これらのapi-ms-win-* DLLはUCRTに属し、VS2015以降、Windows 10 SDKからUCRT DLLを再配布する必要があることをよく知っています(Windows 10のRedist\ucrt\DLLsにあります) SDKディレクトリ)、および私のアプリケーション-vcruntime140.dllおよびmsvcp140.dllを再配布するだけで十分ですnotで十分です。しかし、私のWindows SDKディレクトリにはapi-ms-win-core-rtlsupport-l1-1-0.dllしかありませんが、notapi-ms-win-core-rtlsupport-l1-2-0.dllです。念のため、最新のWindows SDK(10.0.15063)をダウンロードして再インストールしました。それでもDLLはありません!

また、VS2017再頒布可能パッケージをVC_redist.x86.exe経由でWindows 7(またはXP)マシンにインストールしようとしました-Visual Studio Webサイトからダウンロードした最新バージョン(14.11.25325)。明らかに、これはapi-ms-win-* DLLを "System32"ディレクトリにコピーします。ただし、繰り返しになりますが、api-ms-win-core-rtlsupport-l1-1-0.dllのみnotapi-ms-win-core-rtlsupport-l1-2-0.dllです。アプリはまだ起動しません:-/

何か案は?

よろしくお願いします、
MuldeR

enter image description here

enter image description here


[編集]

もちろん、これは、DLLランタイム(/MD)に対してリンクした場合にのみ適用されます。「静的」ランタイム(/MT)に対してリンクした場合、 no DLL UCRTへの依存関係があり、Windows 7およびXPで正常に動作します。


[編集#2]

混乱の解決策については、他の投稿(EDITを含む)を参照してください。
https://stackoverflow.com/a/45773325/1766377

7
MuldeR

さて、これは非常に興味深いです:今すぐ私のVS2017は新しい更新を見つけました。どうやらそれは私のVS2017をv15.2からv15.3.1に更新しました。ランタイムライブラリも更新されたようです。

twoディレクトリ、VC\Redist\MSVC\14.11.25325andVC\Redist\MSVC\14.11.25415がVS2017インストールディレクトリ内にあります。 vcruntime140.dllは両方のディレクトリに存在します。しかしnewerバージョン(25415、右)は、古いバージョン(25325、左)と比べてかなり異なる依存関係を持っています。

enter image description here
「新しい」バージョンのみに依存関係があり、Windows 7にはありません。したがって、「古い」バージョンで問題なく進む必要があります。しかし、それは私が「古い」バージョンにロックされていることを意味します。これは正常ですか?

(BTW:両方DLL VS2017からのバージョンv15.3.1新しいのバージョンよりも私はもともとv15.2)から取得しました

よろしく、
MuldeR


[編集]

つまり、VC\Redist\MSVC\14.11.25325andの間に微妙なの違いがあることに私の注意が向けられました= VC\Redist\MSVC\14.11.25415ディレクトリ:25415ディレクトリには、すべてのDLLファイルがonecoreという別のサブフォルダー内にありますが、もう1つはありません。明らかに、これは "新しい" = DLLバージョン(onecoreサブフォルダがあるバージョン)はnot通常のデスクトップアプリケーションで再配布されることが想定されており、これらは厳密には「OneCore」モバイル/ IoTプラットフォーム用です。

結論:
M $はRedistディレクトリ構造できるだけ混乱するを設計するために素晴らしい仕事をしました。 「通常」と「onecore」の再配布可能ファイルのバージョン番号をディレクトリ階層の同じレベルに配置する(onecoredesktopディレクトリを別々に持つのではなくthatlevel)は、それらのディレクトリが同じものの異なるバージョンを表すことを示します-これはまったく当てはまりません:-/

通常のデスクトップアプリケーションで*/onecore/* DLLを再配布しないでください。

6
MuldeR

プロジェクトのプロパティページで、Windows SDKのバージョンを10.0.15063.0から10.0.10240.0に変更してみてください。古いSDKがビルドマシンにインストールされていれば、問題は解決すると思います。他に試すことは、プラットフォームツールセットをv140_xpに変更することです。 VS 2017は、VS 2015がインストールされている場合、VS 2015ツールチェーンでビルドされます。

私の個人的な好みは、静的ランタイムとリンクすることで「DLL hell」を回避することですが、exeとdllがヒープを共有する必要がある場合は機能せず、複数のバイナリをビルドしている場合はスペースのペナルティが発生します(二)。

0
Paul Sanders