Windows 7、64ビット、DLLの問題


268

実行ファイルに問題があります。私は、Windows 7 64ビット開発ボックスでこのC ++ 32ビット実行可能ファイルを実行していますが、これらのMicrosoftアプリケーション(Visual Studio 2008 + 2010、TFS、SDK、Microsoft Office)もすべて備えています。

今、私はまったく同じプログラムのクライアントインストールを取得し、クリーンなWindows 7インストールでそれをテストするように求められました。したがって、私は1つのWindows 7 64ビットVMwareを取得し、それをWindows 7 SP 1に更新しました(私の開発ボックスが調整しているのとまったく同じバージョンです)。しかし、私の開発者用ボックスでは、すべてが問題ありませんが、プログラムはVMware(30日間トライアル)ボックスでは動作しません。

x86 Dependency Walkerは、次のDLLファイルが見つからないことを通知しています。

  • API-MS-WIN-CORE-COM-L1-1-0.DLL
  • API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
  • API-MS-WIN-CORE-WINRT-L1-1-0.DLL
  • API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
  • API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
  • API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
  • DCOMP.DLL
  • GPSVC.DLL
  • IESHIMS.DLL

私はそれらのAPI-MS-WIN -... DLLファイルを探して、それらが実際には既にWindows 7の一部である必要があることを発見しました(ただし、一部のサイトはWindows 8およびWindows Server 2012に属していると主張しています)。

私は見つけた提案された修正をすでに試しました:

  • 「sfc / scannow」を実行する
  • Visual Studio 2008 SP1ランタイム実行可能ファイルのインストール

しかし、それは何も解決しませんでした。:-(

補足:私の開発用ボックスにもそれらがなく、必要もないようです。たとえば、VMwareへのインストールはリンクしているのに、私のボックスのuser32.dllはそれらのいずれにもリンクしていません。

この問題を修正する方法について何か考えはありますか?Microsoftのページで適切なダウンロード/修正を見つけようとしましたが、失敗しました。


私の問題を解決した後、私が見つけたものを報告したかったのですが、質問が閉じられたため、これを回答として投稿することはできません。

実際には、依存関係ウォーカーツールによって欠落していると報告されたすべてのDLLファイル、つまり

* API-MS-WIN-CORE-...

タイプDLLファイルは実際の問題の一部ではありませんでした。

私の場合、3つのOCXファイルの登録がありませんでしたが、その後はすべて問題なく動作しましたが、Dependency Walkerツールは、プログラムが現在正常に動作している場合でも、以前とまったく同じDLLファイルをすべてリストしていました。

その要点:他の誰かが述べたように、このツールは今では少し古くなっていて、常に新しいOSで正しく動作するとは限りません。したがって、目を開いたままにし、 'API-MS-WIN-CORE-COM-L1-1-0.DLL'がないことで誤解を招かないようにしてください。問題はおそらく完全に別の場所にあります。


1
DirectCompositionは、Windows 7では使用できません(DCOMP.DLL)。
Brian

156
これをもう一度開いてみませんか?私のグーグル検索は、「将来の訪問者を助ける可能性は低い」という理由で閉じられてからわずか20時間後にこの質問に私を導きました...
Christian Severin

27
どの3つのocxファイルを登録する必要がありましたか。さらに重要なのは、どのようにしてそれを理解したのですか。私はこれに数日間こだわっています
Ben Brammer 2013

2
こんにちは。私はこれを釘付けにしたと思います(下記を参照)が、補足として、IESHIMS.DLLおよびGPSVC.DLLへのリンクの失敗を無視しても問題ありません。それは基本的に私がWin7でコンパイルするすべてのものに現れ、機能には影響がないようです。この体験は、現在約30以上のバイナリから引き出されています。 ため息私は嫌い-憎悪憎悪は、Windowsがこのような理由のためにdevのこと。
meawoppl 2013

3
api-ms-win- * DLLにつながったWindows 7カーネルの変更については、こちらのnirsoft.net/articles/windows_7_kernel_architecture_changes.htmlでかなり詳しく説明されています。DependencyWalkerはこれらの変更を処理できないので、あまり心配しないでください。MSから:msdn.microsoft.com/en-us/library/hh802935%28v=vs.85%29.aspx
x29a

回答:


63

この問題は、Visual Studioの「再配布可能なパッケージ」がないことに関連しています。依存関係のウォークに基づいてどれが欠けているかは明らかではありませんが、最初にコンパイラーのバージョンに対応するものを試して、正常に動作するかどうかを確認します。

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

Visual Studioコンパイラーを使用していますが、完全なVisual Studio環境ではないため、この問題に遭遇しました。


あえて新しいリンクをここに挿入します:サポートされている最新のVisual C ++ダウンロードスタインÅsmul、29.11.2018



1
また、Win 7の一部のバージョンに再配布可能なパッケージをインストールしたことが原因である可能性もあります。m$に感謝します。
meawoppl 2014

私もこれに問題があり、それを修正するための複数の方法があると信じています。私の場合、デバッグ構成でコンパイルすると、com dllが登録されないことに気付きました。しかし、構成をリリースに変更すると、クリーンな登録ができました。私の環境はVS 2012です。適切なredist(x64バージョン)ファイルをcom dllと同じフォルダーにコピーしました。
ジムケネディ

注意:新しいwin SDK / DDKの一部には、これらの一部も含まれています!
meawoppl 2014

1
VS2015 vcredist _ *。exeはこれらのDLLをインストールしますが、VSで提供されるMSMのような他のメソッドはインストールしません。vcredistにはこれらのDLLが含まれており、最小限必要なプラットフォームが必要です。(Windows 7 sp1を有効にするには2回インストールする必要があったことに注意してください
-WUは

19

MSCVC 2012のC ++ Qt 5およびWindows 7 64ビットで同じ問題を解決しました。

最初はMSVC / Windows DLLファイルの問題だと思いましたが、BorisPが言ったように、問題はプロジェクトの依存関係にありました。重要なのは、「Qt 5でプロジェクトの依存関係を知る方法」です。

私はそれを明確に知る方法が見つからなかったので(Dependency Walkerはあまり役に立たなかった...)、次の「逆の手順」を実行しました。ファイルの依存関係:

  1. プロジェクトをコンパイルし、実行可能ファイルを空のフォルダーに移動します:myproject.exe
  2. それを実行しようとすると、エラーが表示されます(DLLファイルが見つからない...)。
  3. 次に、すべてのDLLファイルをQt(私の場合はC:\ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ binにありました)からこのフォルダーにコピーします。
  4. もう一度実行してみてください。おそらく正常に動作します。
  5. 徐々に削除を開始し、実行可能ファイルが引き続き機能するたびに、必要最低限​​のDLLファイルを残してみます。

同じフォルダーにすべてのDLLファイルがある場合、それらのうちどれが無効であるか(XML、WebKitなど...)を見つけるのは簡単であり、その結果、このメソッドは5分以上かかりません。


欠落しているDLLがGACアセンブリである場合、このメソッドは欠落しているDLLを特定するのに役立ち(エラーメッセージは、ロードできなかったアセンブリを通知するはずです)、インストールするツールキットまたはフレームワークを特定する必要があります。それらをGACに配置する(またはディストリビューションに含める)マシン。
rcabr 2014

2
これは、起動時に読み込まれる直接のdll依存関係に対してのみ機能します。プログラムまたはdllが遅延または動的に一部のdllをロードする場合、あなたのアプローチではそれらを見つけることができません。
A. Binzxxxxxx 2014年

また、この方法でこれを行うと、アプリケーションがPATH変数の順序に影響され、場合によってはシステムバージョンが読み込まれ、他の場合はローカルフォルダーに読み込まれることに注意してください。M $は、セキュリティ上の問題がこれを呼び出しますが、率直に言って、それは負荷にCWDを使用するための彼らのせいです:support.microsoft.com/en-us/kb/2389418
meawoppl

3
これは手動で行わないでください。そのwindeployqtためのツールがあります。たとえば、stackoverflow.com
a / 33292008/4023446を

1
@OrestHeraはwindeployqt不要なファイルをコピーすることがよくあります。

16

同じ問題を解決しました。

この場合、Dependency Walkerは誤解を招きやすく、時間を浪費してしまいました。したがって、最初の投稿で「欠落」しているDLLファイルのリストは役に立ちません。おそらく無視できます。

解決策はプロジェクトが呼び出している参照を見つけ、それらが実際にサーバーにインストールされているかどうかを確認することです。

@Ben Brammer、Leo T Abrahamのプロジェクトでのみ欠落しているため、欠落している3つの.ocxファイルは重要ではありません。プロジェクトはおそらく他のDLLファイルを呼び出します。

私の場合、それは3つの.ocxファイルではなく、MySQLコネクタDLLファイルがありませんでした。MySQL Connector for .NETをサーバーにインストールした後、問題は解消されました。

つまり、簡単に言うと、解決策は、すべてのプロジェクト参照がそこにあるかどうかを確認することです。


12

前述のように、DCOMPはVC ++再配布可能ファイル(OpenMPランタイムを実装)の一部であり、唯一欠けているコンポーネントです。残りはすべて虚偽の報告です。

具体的には、API-MS-WIN-XXXX.DLLはAPIセットです - 基本的に、コール・間接の余分なレベルは、 Windows 7のため、徐々に導入された依存関係ウォーカーの開発は、一見そのずっと前に停止し、それが適切にAPIセットを処理することはできません。

だから心配することは何もありません。これ以上何も見逃していません。

欠落している本当に必要なDLLファイルを見つけるためのより良い代替策(それが実際に問題である場合)は、プロセスモニターを実行して障害から逆戻りし、すべてのシステムパスで特定のDLLファイルの失敗したプローブのシーケンスを検索することです。


+1(ProcessMonitorの場合)。マイクロソフトからの無料ダウンロードです。matlabプロセスにアタッチすると、dll-loadsを含む、進行中のすべてを見ることができます
Janus

6

私もこの問題に遭遇しましたが、ここで一般的なスレッドのように思える解決策であり、Webのどこかで見たように、「再配布可能なパッケージを再インストール」します。しかし、私にとってはうまくいきません。問題の原因は、再配布可能なパッケージをインストールする製品のインストーラーを実行して、光沢のある新しいVisual Studio 2015ビルドをテストするときに発生しました。

リストされたDLLファイルがVisual Studioインストールパス(たとえば、C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ redist)にないため、インストールに追加されなかったため、問題が発生しました。これらのapi-ms-win- * dllは、Visual Studio 2015インストールの一部としてWindows 10 SDKインストールパスにインストールされます(例:C:\ Program Files(x86)\ Windows Kits \ 10 \ Redist)。

Windows 10へのインストールは問題なく機能しましたが、Windows 7へのインストールでは、これらのDLLファイルを製品インストールに追加する必要がありました。詳細については、Visual Studio 2015によって引き起こされるこれらの依存関係の追加について説明し、さまざまなWindowsプラットフォーム用のダウンロードを提供する、WindowsのユニバーサルCランタイムの更新を参照してください。CRTライブラリの再設計について説明している「ユニバーサルCRTの紹介」も参照してください。特に興味深いのは、ユニバーサルCRTを使用するソフトウェアの配布というタイトルのセクションの項目6 です。

2015年9月11日更新:Universal CRTのアプリローカル展開がサポートされています。アプリローカル展開用のバイナリを取得するには、Windows 10用のWindowsソフトウェア開発キット(SDK)をインストールします。バイナリはC:\ Program Files(x86)\ Windows Kits \ 10 \ Redist \ ucrtにインストールされます。アプリと共にすべてのDLLをコピーする必要があります(DLLファイルのセットはWindowsのバージョンによって異なるため、サポートされているすべてのバージョンでプログラムを実行するには、すべてのDLLファイルを含める必要があります) Windowsの)。


5

この貢献は本当に最初の質問には答えませんが、このスレッドのヒット率を考慮すると、API-MS-WIN-CORE-ライブラリが見つからないという問題に対処している人はかなりいると思います。

Visual Studioを更新するだけで、API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLLが見つからないというエラーメッセージが表示されてアプリケーションが拒否する問題を解決できました。

私のビルド環境(Windows 7 Pro SP1、Visual Studio Ultimate 2012)が完全にめちゃくちゃになったとは思いません。ほとんどのプロジェクトで問題なく動作しました。しかし、非常に特殊な状況下では、エラーメッセージが表示されました(以下を参照)。

のVisual Studio 11の更新初期CD-バージョンからも壊れプロジェクトが再び実行されていた更新4バージョン11.0.61030.00に(私はバージョン番号をルックアップするために忘れてしまいました)。

アプリケーション起動時のエラーメッセージ


リンクは(事実上)壊れています「申し訳ありませんが、このダウンロードは利用できません。」)。
Peter Mortensen、

@PeterMortensen Update 5へのこのリンクを見つけましたが、推奨される回避策がまだ適用されるかどうかはわかりません。Update 4は使用できなくなりました。ここにVS2012の更新のリストがあります。報告された製品の終了日は2023年10月です。
ノルマニウス

3

これは私のために問題を解決しました:

Visual Studio 2010再頒布可能パッケージを既にインストールしている場合は、それをアンインストールしてから、Microsoft Windows 7 SDKをインストールします


1
インストールノートでは、再配布パッケージに上記のDLLの冗長バージョンが含まれており、コードやその他の形式のWin7 herp-derpの動的リンクの混乱を引き起こすため、アンインストールすることをお勧めします。インストール中にこれが行われないのはなぜですか?#iwishihadarealpackagemanagerとして安全にファイルできます。
meawoppl 2013

1
私も働いた。.net directxをインストールして、何時間も費やしましたが、msvc ++の再インストールは機能しました
NoWomenNoCry

2

私は問題を解決しました。OCXファイルを登録したところ、管理者として実行していたコマンドウィンドウで実行しました。


1

ここに来たが、Photoshopの問題があった人のために:私の解決策は、MS VC ++再頒布可能パッケージの最初のx86と64の両方をアンインストールすることでした。次に、Windowsのバージョンとアーキテクチャ(86または64)に適したものをインストールします。


0

新しくインストールされたWindows 7 にSQL Server Management Studio 2014をインストールすると、2日間のばかげた戦いの後、クライアントでこの問題が解決されました。


3
他にも多くの回答が存在し、おそらくコメントとしては最高でしょう
Paul Bastide

0

私も同じ問題を抱えていました。Webで何時間も検索した結果、解決策が見つかりました。

combase.dllファイル(C:\ Windows \ System32)をリリースフォルダーにコピーし、問題を解決しました。


2
パスにランダムなDLLをインストールするのは悪い考えです。
meawoppl

0

私はこの問題が発生した状態でここに来ました、Windows 7 OEMの新規インストールを試み、Windows 10にアップグレードした後。

マイクロソフトフォーラムなどを検索したところ、次の解決策が見つかりました。

C:\Windows10Upgrade\wimgapi.dllからのものと交換C:\Windows\System32\wimgapi.dll


パスにランダムなDLLをインストールするのは悪い考えです。
meawoppl

もちろんそうですが、まったく新しいインストールの場合、何が壊れますか?:D
djsmiley2kStaysInside

0

現在使用されているメモリの量も確認することをお勧めします。

これらのDLLファイルが見つからないことが、Visual Studioでプログラムを実行(実行またはデバッグ)しようとしたときに発生した最初の症状であることがわかりました。

頭をひっかいて、ウェブを検索し、Process Monitor、およびTask Managerを実行して30分以上経過した後、最初から実行されていたまったく異なるプログラムが「メモリが少ないため、一部のプログラムを停止してみてください」と報告したまたはそのようなもの。Firefox、Thunderbird、Process Monitorなどを強制終了した後、すべてが再び機能しました。


0

ここで答えを確認するために、私の解決策は、読み込まれていないDLLとそれに付随するocxファイルをsystem32フォルダーにコピーすることでしたが、これにより問題が解決しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.