Windows 7, 64 Bit, DLL Probleme


268

Ich habe ein Problem mit unserer ausführbaren Datei. Ich führe diese ausführbare C ++ - 32-Bit-Datei auf meiner Windows 7 64-Bit-Entwicklungsbox aus, die auch alle Microsoft-Anwendungen enthält (Visual Studio 2008 + 2010, TFS, SDK, Microsoft Office) ... und sie läuft immer noch einwandfrei.

Jetzt bekam ich die Client-Installation des gleichen Programms und wurde gebeten, es mit einer sauberen Windows 7-Installation zu testen. Daher habe ich eine Windows 7 64-Bit-VMware erhalten und auf Windows 7 SP 1 aktualisiert (dieselbe Version, die meine Entwicklerbox optimiert). Aber während auf meiner Entwicklerbox alles in Ordnung ist, funktioniert das Programm nicht mit der VMware-Box (30 Tage Testversion).

Der x86 Dependency Walker teilt mir mit, dass die folgenden DLL-Dateien fehlen:

  • 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

Ich habe nach diesen API-MS-WIN -... DLL-Dateien gegoogelt und festgestellt, dass sie tatsächlich bereits Teil von Windows 7 sein sollten (einige Websites behaupten jedoch, dass sie zu Windows 8 und Windows Server 2012 gehören).

Ich habe bereits die vorgeschlagenen Korrekturen ausprobiert, die ich gefunden habe:

  • Ausführen von 'sfc / scannow'
  • Installieren der ausführbaren Laufzeitdateien von Visual Studio 2008 SP1

Aber das hat nichts gelöst. :-(

Randnotiz: Meine Entwicklungsbox hat sie auch nicht und scheint sie nicht zu brauchen. Beispielsweise wird die user32.dll auf meiner Box nicht mit einer dieser verknüpft, während dies bei der Installation auf der VMware der Fall ist.

Haben Sie eine Idee, wie Sie dieses Problem beheben können? Ich habe versucht, auf den Microsoft-Seiten einen geeigneten Download / Fix zu finden, bin jedoch gescheitert.


Nachdem ich mein Problem gelöst hatte, wollte ich berichten, was ich herausgefunden habe, und ich kann dies nicht als Antwort posten, da die Frage geschlossen wurde.

Tatsächlich werden alle DLL-Dateien, die vom Dependency Walker-Tool als fehlend gemeldet wurden, nämlich die

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

Typ-DLL-Dateien waren nicht Teil des eigentlichen Problems.

In meinem Fall fehlte die Registrierung von drei OCX-Dateien und danach war alles in Ordnung, ABER das Dependency Walker-Tool listete immer noch dieselben DLL-Dateien wie zuvor auf, selbst wenn das Programm gerade in Ordnung war.

Das Wesentliche: Wie bereits an anderer Stelle erwähnt, ist das Tool inzwischen etwas veraltet und funktioniert mit einem neueren Betriebssystem nicht immer ordnungsgemäß. Halten Sie also ein Auge offen und lassen Sie sich nicht durch das Fehlen von 'API-MS-WIN-CORE-COM-L1-1-0.DLL' irreführen. Das Problem liegt wahrscheinlich ganz woanders.


1
DirectComposition ist meines Wissens unter Windows 7 nicht verfügbar (DCOMP.DLL).
Brian

156
Wie wäre es damit, dies wieder zu öffnen? Meine Google-Suche führte mich zu dieser Frage nur 20 Stunden, nachdem sie geschlossen wurde, weil es "unwahrscheinlich ist, dass sie zukünftigen Besuchern hilft" ...
Christian Severin

27
Welche 3 OCX-Dateien mussten Sie registrieren und, was noch wichtiger ist, wie haben Sie das herausgefunden? Ich bin jetzt seit ein paar Tagen dabei
Ben Brammer

2
Hey alle zusammen. Ich glaube, ich habe es geschafft (siehe unten), aber als Randnotiz können Sie den Fehler beim Verknüpfen mit IESHIMS.DLL und GPSVC.DLL ignorieren. Es kommt im Grunde in allem vor, was ich in Win7 kompiliere, und scheint keine Auswirkungen auf die Funktion zu haben. Diese Erfahrung stammt aus mehr als 30 Binärdateien. Seufz Ich hasse es, Windows Dev aus solchen Gründen zu hassen.
Meawoppl

3
Windows 7 Kernel - Änderungen geführt , dass zu api-ms-Win * DLLs sind recht gut hier erklärt nirsoft.net/articles/windows_7_kernel_architecture_changes.html - ich denke , Dependency Walker gerade kippt diese Veränderungen handhaben - so dont Sorge um denjenigen zu viel. Von MS: msdn.microsoft.com/en-us/library/hh802935%28v=vs.85%29.aspx
x29a

Antworten:


63

Dieses Problem hängt damit zusammen, dass das "weiterverteilbare Paket" von Visual Studio fehlt. Es ist nicht offensichtlich, welches aufgrund des Abhängigkeitslaufs fehlt, aber ich würde zuerst das versuchen, das Ihrer Compilerversion entspricht, und prüfen, ob die Dinge richtig laufen:

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

Ich bin auf dieses Problem gestoßen, weil ich die Visual Studio-Compiler verwende, aber nicht die vollständige Visual Studio-Umgebung.


Ich werde es wagen, hier einen neuen Link einzufügen: Die neuesten unterstützten Visual C ++ - Downloads . Stein Åsmul, 29.11.2018 .



1
Es scheint auch, dass dies durch die Installation der weiterverteilbaren Pakete auf einigen Versionen von Win 7 verursacht werden kann. Danke m $.
Meawoppl

Ich hatte auch Probleme damit und glaube, dass es mehrere Wege gibt, dies zu beheben. In meinem Fall habe ich festgestellt, dass beim Kompilieren mit der Debug-Konfiguration meine COM-DLL nicht registriert wurde. Als ich jedoch meine Konfiguration auf Release änderte, konnte ich eine saubere Registrierung durchführen. Meine Umgebung ist VS 2012. Und ich habe die richtigen Redist-Dateien (x64-Version) in denselben Ordner wie meine COM-DLL kopiert.
Jim Kennedy

NB einige der neueren Win SDK / DDKs kommen auch mit einigen davon!
Meawoppl

1
VS2015 vcredist _ *. Exe installiert diese DLLs, andere Methoden, wie z. B. mit VS gelieferte MSMs, jedoch nicht. vcredist enthält diese DLLs, und Sie benötigen die minimal erforderliche Plattform. (Beachten Sie, dass ich Windows 7 SP1 zweimal installieren musste, damit es wirksam wurde - WU hat gelogen!) Microsoft.com/en-us/download/details.aspx?id=48234
GilesDMiddleton

19

Ich habe gerade das gleiche Problem mit C ++ Qt 5 und Windows 7 64 Bit mit MSCVC 2012 gelöst.

Am Anfang dachte ich, es sei ein Problem mit MSVC / Windows-DLL-Dateien, aber wie BorisP sagte, lag das Problem in meinen Projektabhängigkeiten. Der Schlüssel lautet " Woher kennen Sie Ihre Projektabhängigkeiten in Qt 5? ".

Da ich keinen klaren Weg gefunden habe, es zu wissen ( Dependency Walker hat mir nicht viel geholfen ...), folgte ich als nächstes dem "inversen Verfahren", das nicht länger als 5 Minuten dauert, und vermeide viele Kopfschmerzen mit DLL Dateiabhängigkeiten:

  1. Kompilieren Sie Ihr Projekt und bringen Sie die ausführbare Datei in einen leeren Ordner: myproject.exe
  2. Versuchen Sie es auszuführen. Es wird ein Fehler abgerufen (fehlende DLL-Dateien ...).
  3. Nun kopieren Sie alle DLL - Dateien von Qt (in meinem Fall waren sie in C: \ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ bin) in diesen Ordner.
  4. Versuchen Sie erneut, es wird wahrscheinlich gut funktionieren.
  5. Beginnen Sie mit dem schrittweisen Löschen und versuchen Sie jedes Mal, wenn Ihre ausführbare Datei noch funktioniert, die minimal erforderlichen DLL-Dateien zu belassen.

Wenn Sie alle DLL-Dateien im selben Ordner haben, ist es einfacher zu finden, welche davon ungültig sind (XML, WebKit, ... was auch immer ...), und folglich dauert diese Methode nicht länger als fünf Minuten.


Wenn es sich bei den fehlenden DLLs um GAC-Assemblys handelt, können Sie anhand dieser Methode ermitteln, welche DLLs fehlen (in den Fehlermeldungen sollte angegeben werden, welche Assembly nicht geladen werden konnte). Anschließend müssen Sie herausfinden, auf welchem ​​Toolkit oder Framework installiert werden soll die Maschine, um sie in das GAC zu legen (oder Ihrer Distribution beizufügen).
Rcabr

2
Dies funktioniert nur für direkte DLL-Abhängigkeiten, die beim Start geladen werden. Wenn Ihr Programm oder Ihre DLLs einige DLLs verzögert oder dynamisch laden, können Sie sie mit Ihrem Ansatz nicht finden.
A. Binzxxxxxx

Beachten Sie auch, dass Sie auf diese Weise die Anwendung für die Reihenfolge der PATH-Variablen sensibilisieren und in einigen Fällen die Systemversionen und in anderen Fällen die in den lokalen Ordnern laden. M $ nennt dies ein Sicherheitsproblem, aber ehrlich gesagt ist es ihre Schuld, das CWD in Lasten zu verwenden: support.microsoft.com/en-us/kb/2389418
meawoppl

3
Das sollte nicht manuell gemacht werden. Es gibt ein windeployqtTool dafür, siehe zum Beispiel stackoverflow.com/a/33292008/4023446
Orest Hera

1
@OrestHera windeployqtkopiert häufig unnötige Dateien.

16

Ich habe gerade das gleiche Problem gelöst.

Dependency Walker ist in diesem Fall irreführend und hat mich Zeit verlieren lassen. Daher ist die Liste der "fehlenden" DLL-Dateien aus dem ersten Beitrag nicht hilfreich, und Sie können sie wahrscheinlich ignorieren.

Die Lösung besteht darin, herauszufinden, welche Referenzen Ihr Projekt aufruft, und zu überprüfen, ob sie tatsächlich auf dem Server installiert sind.

@ Ben Brammer, es ist nicht wichtig, welche drei .ocx-Dateien fehlen, da sie nur für Leo T Abrahams Projekt fehlen. Ihr Projekt ruft wahrscheinlich andere DLL-Dateien auf.

In meinem Fall waren es nicht drei .ocx-Dateien, sondern eine fehlende MySQL-Connector-DLL-Datei. Nach der Installation von MySQL Connector für .NET auf dem Server verschwand das Problem.

Kurz gesagt lautet die Lösung: Überprüfen Sie, ob alle Ihre Projektreferenzen vorhanden sind.


12

Wie bereits erwähnt, ist DCOMP Teil der VC ++ Redistributables (Implementierung der OpenMP-Laufzeit) und die einzige wirklich fehlende Komponente. Der Rest sind falsche Berichte.

Insbesondere API-MS-WIN-XXXX.DLL sind API-Sets - im Wesentlichen eine zusätzliche Ebene der Anrufindirektion, die seit Windows 7 schrittweise eingeführt wurde. Die Entwicklung von Dependency Walker wurde anscheinend lange zuvor gestoppt und kann API-Sets nicht ordnungsgemäß verarbeiten.

Es gibt also nichts, worüber man sich Sorgen machen müsste. Sie vermissen nichts mehr.

Eine bessere Alternative, um die wirklich benötigten fehlenden DLL-Dateien zu finden (falls dies tatsächlich das Problem ist), besteht darin, Process Monitor auszuführen und vom Fehler zurückzutreten und nach Sequenzen fehlgeschlagener Tests für eine bestimmte DLL-Datei im gesamten Systempfad zu suchen.


+1 Für ProcessMonitor. Es ist ein kostenloser Download von Microsoft. Wenn Sie sich dem Matlab-Prozess anschließen, können Sie alles sehen, was gerade passiert, einschließlich DLL-Ladevorgänge
Janus

6

Ich bin auch auf dieses Problem gestoßen, aber die Lösung, die hier ein allgemeiner Thread zu sein scheint und die ich an anderer Stelle im Web gesehen habe, ist "das weiterverteilbare Paket [neu] installieren". Für mich funktioniert dies jedoch nicht, da das Problem beim Ausführen des Installationsprogramms für unser Produkt (das das weiterverteilbare Paket installiert) zum Testen unserer glänzenden neuen Visual Studio 2015-Builds aufgetreten ist.

Das Problem trat auf, weil sich die aufgelisteten DLL-Dateien nicht im Visual Studio-Installationspfad befinden (z. B. C: \ Programme (x86) \ Microsoft Visual Studio 14.0 \ VC \ redist) und daher nicht zur Installation hinzugefügt wurden. Diese api-ms-win- * -Dlls werden im Rahmen der Visual Studio 2015-Installation auf einem Windows 10 SDK-Installationspfad installiert (z. B. C: \ Programme (x86) \ Windows Kits \ 10 \ Redist).

Die Installation unter Windows 10 funktionierte einwandfrei, für die Installation unter Windows 7 mussten diese DLL-Dateien jedoch zu unserer Produktinstallation hinzugefügt werden. Weitere Informationen finden Sie unter Update für Universal C Runtime in Windows, in dem das Hinzufügen dieser durch Visual Studio 2015 verursachten Abhängigkeiten beschrieben wird und Downloads für verschiedene Windows-Plattformen bereitgestellt werden. Siehe auch Einführung in die universelle CRT, in der das Redesign der CRT-Bibliotheken beschrieben wird. Von besonderem Interesse ist Punkt 6 im Abschnitt Verteilen von Software, die die universelle CRT verwendet :

Aktualisiert am 11. September 2015: Die app-lokale Bereitstellung des Universal CRT wird unterstützt. Installieren Sie das Windows Software Development Kit (SDK) für Windows 10, um die Binärdateien für die app-lokale Bereitstellung zu erhalten. Die Binärdateien werden unter C: \ Programme (x86) \ Windows Kits \ 10 \ Redist \ ucrt installiert. Sie müssen alle DLLs mit Ihrer App kopieren (beachten Sie, dass die erforderlichen DLL-Dateien in verschiedenen Windows-Versionen unterschiedlich sind. Sie müssen daher alle DLL-Dateien einschließen, damit Ihr Programm auf allen unterstützten Versionen ausgeführt werden kann von Windows).


5

Dieser Beitrag beantwortet die ursprüngliche Frage nicht wirklich, aber unter Berücksichtigung der Trefferquote dieses Threads gehe ich davon aus, dass es einige Leute gibt, die sich mit dem Problem befassen, dass API-MS-WIN-CORE-Bibliotheken nicht gefunden werden können.

Ich konnte ein Problem lösen, bei dem meine Anwendung sich weigerte, mit der Fehlermeldung zu beginnen, dass API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL nicht durch einfaches Aktualisieren von Visual Studio gefunden wird.

Ich glaube nicht, dass meine Build-Umgebung (Windows 7 Pro SP1, Visual Studio Ultimate 2012) völlig durcheinander war, es hat für die meisten meiner Projekte gut funktioniert. Unter bestimmten Umständen wurde jedoch die Fehlermeldung angezeigt (siehe unten).

Nach dem Update von Visual Studio 11 von der ersten CD-Version (ich habe vergessen, die Versionsnummer nachzuschlagen) auf Version 11.0.61030.00 Update 4 wurde auch das kaputte Projekt erneut ausgeführt.

Fehlermeldung beim Start der Anwendung


Der Link ist (effektiv) defekt ( "Es tut uns leid, dieser Download ist nicht mehr verfügbar." ).
Peter Mortensen

@PeterMortensen Ich habe diesen Link zu Update 5 gefunden , aber keine Ahnung, ob die vorgeschlagene Problemumgehung weiterhin gilt. Update 4 ist nicht mehr verfügbar. Hier eine Liste der Updates für VS2012 . Das gemeldete Produktenddatum ist 10/2023.
Normanius

3

Dies löste das Problem für mich:

Deinstallieren Sie das weiterverteilbare Visual Studio 2010-Paket, falls Sie es bereits installiert haben, und installieren Sie dann das Microsoft Windows 7 SDK .


1
In den Installationshinweisen wird empfohlen, die Redistribute-Pakete zu deinstallieren, da sie redundante Versionen der oben genannten DLLs enthalten und bei Code und anderen Formen von Win7 herp-derp zu Verwirrung bei der dynamischen Verknüpfung führen. Warum dies während der Installation nicht für Sie erledigt wird, können wir sicher als #iwishihadarealpackagemanager ablegen.
Meawoppl

1
arbeitete auch für mich. So viele Stunden wurden damit verbracht, .net directx zu installieren, aber msvc ++ neu zu installieren
NoWomenNoCry

2

Ich habe das Problem gelöst. Als ich die OCX-Dateien registriert habe, habe ich sie mit dem Befehlsfenster ausgeführt, das als Administrator ausgeführt wurde.


1

Für alle, die hierher kamen, aber mit einem Photoshop- Problem: Meine Lösung bestand darin, die zuerst verteilbaren MS VC ++ zuerst x86 und 64 zu deinstallieren. Installieren Sie dann eine für die Windows-Version und -Architektur geeignete (86 oder 64).


0

Die Installation von SQL Server Management Studio 2014 unter einem neu installierten Windows 7 löste dieses Problem auf unserem Client nach einem zweitägigen lächerlichen Kampf.


3
Es gibt viele andere Antworten, und vielleicht wäre es am besten als Kommentar
Paul Bastide

0

Ich hatte das gleiche Problem. Nachdem ich stundenlang im Internet gesucht hatte, fand ich eine Lösung für mich.

Ich habe die Datei combase.dll (C: \ Windows \ System32) in den Release-Ordner kopiert und das Problem behoben.


2
Das Installieren von zufälligen DLLs auf Ihrem Pfad ist eine schlechte Idee.
Meawoppl

0

Ich bin mit diesem Problem hierher gekommen, nachdem ich versucht hatte, eine neue Windows 7-OEM-Installation durchzuführen und auf Windows 10 zu aktualisieren.

Nach einigen Recherchen in Microsoft-Foren und dergleichen habe ich die folgende Lösung gefunden, die für mich funktioniert hat:

Ersetzen Sie C:\Windows10Upgrade\wimgapi.dlldurch die vonC:\Windows\System32\wimgapi.dll


Das Installieren von zufälligen DLLs auf Ihrem Pfad ist eine schlechte Idee.
Meawoppl

Natürlich ist es das, aber wenn es eine brandneue Installation ist, was gibt es zu brechen? : D
djsmiley2kStaysInside

0

Ich schlage vor, auch zu überprüfen, wie viel Speicher derzeit verwendet wird.

Es stellt sich heraus, dass die Unfähigkeit, diese DLL-Dateien zu finden, das erste Symptom war, das beim Versuch auftrat, ein Programm (entweder ausführen oder debuggen) in Visual Studio auszuführen.

Nach über einer halben Stunde mit viel Kopfkratzen, Durchsuchen des Webs, Ausführen von Process Monitor und Task Manager und abhängig davon berichtete ein völlig anderes Programm, das seit Beginn der Zeit ausgeführt wurde, dass "der Speicher knapp ist; versuchen Sie, einige Programme anzuhalten". oder solche. Nach dem Töten von Firefox, Thunderbird, Process Monitor und Dependent hat alles wieder funktioniert.


0

Um die Antworten hier zu bestätigen, bestand meine Lösung darin, die nicht geladene DLL UND die dazugehörige OCX-Datei in den Ordner system32 zu kopieren, wodurch mein Problem behoben wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.