Windows 7, 64 bit, problemi DLL


268

Ho un problema con il nostro eseguibile. Sto eseguendo questo eseguibile C ++ a 32 bit sulla mia casella di sviluppo di Windows 7 a 64 bit che ha anche tutte quelle applicazioni Microsoft (Visual Studio 2008 + 2010, TFS, SDK, Microsoft Office) ... E funziona ancora bene.

Ora ho ottenuto l'installazione client dello stesso programma e mi è stato chiesto di testarlo con un'installazione pulita di Windows 7. Così ho ottenuto un VMware Windows 7 a 64 bit e l'ho aggiornato a Windows 7 SP 1 (la stessa versione che sta sintonizzando la mia casella di sviluppatore). Ma mentre sulla mia scatola degli sviluppatori tutto va bene, il programma non funziona con la scatola di VMware (30 giorni di prova).

Il Walker di dipendenza x86 mi sta dicendo che mancano i seguenti file 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 DECALCF-L1-1-0.DLL
  • DCOMP.DLL
  • GPSVC.DLL
  • Ieshims.dll

Ho cercato su Google quei file DLL API-MS-WIN -... e ho scoperto che in realtà dovrebbero già essere parte di Windows 7 (alcuni siti che dichiarano di appartenere a Windows 8 e Windows Server 2012).

Ho già provato le correzioni suggerite che ho trovato, che sono:

  • eseguendo 'sfc / scannow'
  • installazione degli eseguibili di runtime di Visual Studio 2008 SP1

Ma questo non ha risolto nulla. :-(

Nota a margine: anche la mia scatola di sviluppo non li ha e non sembra averne bisogno. Ad esempio, user32.dll sulla mia scatola non si collega a uno di questi, mentre l'installazione su VMware lo fa.

Qualche idea su come risolvere questo problema? Ho provato a trovare un download / correzione adatto sulle pagine di Microsoft, ma non ci sono riuscito.


Dopo aver risolto il mio problema, volevo segnalare ciò che avevo scoperto e non posso pubblicarlo come risposta perché la domanda è stata chiusa.

In realtà tutti i file DLL segnalati mancanti dallo strumento Dependency Walker, in particolare quelli

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

i file DLL di tipo non facevano parte del problema reale.

Nel mio caso mancava la registrazione di tre file OCX e dopo tutto andava bene, lo strumento Dipendenza Walker elencava ancora tutti gli stessi file DLL di prima anche quando il programma stava funzionando bene ora.

L'essenza di esso: come ha affermato qualcun altro, lo strumento è un po 'datato ormai e non sempre funziona correttamente con un nuovo sistema operativo. Quindi tieni gli occhi aperti e non trarre in inganno mancando "API-MS-WIN-CORE-COM-L1-1-0.DLL", ... il problema probabilmente risiede interamente altrove.


1
DirectComposition non è disponibile su Windows 7 per quanto ne so (DCOMP.DLL).
Brian,

156
Che ne dici di riaprirlo? La mia ricerca su Google mi ha portato a questa domanda solo 20 ore dopo che è stata chiusa per essere "improbabile che possa aiutare qualsiasi futuro visitatore" ...
Christian Severin,

27
quali file di 3 ocx hai dovuto registrare e, cosa più importante, come l'hai capito? Sono stato bloccato su questo per alcuni giorni ormai
Ben Brammer

2
Ciao a tutti. Penso di averlo inchiodato (vedi sotto), ma come nota a margine, puoi tranquillamente ignorare il fallimento del collegamento a IESHIMS.DLL e GPSVC.DLL. Viene in sostanza in tutto ciò che compilo in Win7 e sembra non avere conseguenze sulla funzione. Questa esperienza proviene da circa 30+ binari ora. sospiro odio-odio-odio fare windows dev per ragioni come questa.
meawoppl

3
Le modifiche del kernel di Windows 7 che hanno portato a api-ms-win- * Le DLL sono spiegate abbastanza bene qui nirsoft.net/articles/windows_7_kernel_architecture_changes.html - penso che DependencyWalker non riesca a gestire queste modifiche - quindi non preoccuparti troppo di quelle. Da MS: msdn.microsoft.com/en-us/library/hh802935%28v=vs.85%29.aspx
x29a

Risposte:


63

Questo problema è legato alla mancanza del "pacchetto ridistribuibile" di Visual Studio. Non è ovvio quale manca in base alla passeggiata delle dipendenze, ma proverei prima quello che corrisponde alla versione del tuo compilatore e vedrei se le cose funzionano correttamente:

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

Ho riscontrato questo problema perché sto utilizzando i compilatori di Visual Studio, ma non l'intero ambiente di Visual Studio.


Avendo il coraggio di iniettare un nuovo link qui: gli ultimi download di Visual C ++ supportati . Stein Åsmul, 29.11.2018 .



1
Inoltre, sembra che ciò possa essere causato dall'installazione dei pacchetti ridistribuibili su alcune versioni di Win 7. Grazie m $.
meawoppl,

Anch'io ho avuto problemi con questo e credo che ci siano più percorsi per risolverlo. Nel mio caso, ho notato che la compilazione con la configurazione di debug ha impedito la registrazione della mia dll. Tuttavia, quando ho cambiato la mia configurazione per rilasciarla, sono stato in grado di avere una registrazione pulita. Il mio ambiente è VS 2012. E ho copiato i file redist corretti (versione x64) nella stessa cartella della mia dll.
Jim Kennedy,

NB alcuni dei più recenti SDK / DDK vincenti arrivano anche con alcuni di questi!
meawoppl,

1
Il vcredist di VS2015 _ *. Exe installa queste DLL, ma altri metodi, come MSM forniti con VS, no. vcredist include queste DLL e avrai bisogno della piattaforma minima richiesta. (Nota che ho dovuto installare Windows 7 SP1 due volte perché abbia effetto - WU ha mentito!) Microsoft.com/en-us/download/details.aspx?id=48234
GilesDMiddleton

19

Ho appena risolto lo stesso problema con C ++ Qt 5 e Windows 7 64 bit con MSCVC 2012.

All'inizio pensavo fosse un problema con il file DLL MSVC / Windows, ma come diceva BorisP, il problema era nelle dipendenze del mio progetto. La chiave è " Come conoscere le dipendenze del progetto in Qt 5? ".

Dato che non ho trovato alcun modo chiaro per conoscerlo ( Dependency Walker non mi ha aiutato molto ...), ho seguito la "procedura inversa" che non richiede più di 5 minuti ed evita molti mal di testa con DLL dipendenze dei file:

  1. Compilare il progetto e portare il file eseguibile in una cartella vuota: myproject.exe
  2. Prova a eseguirlo, recupererà un errore (file DLL mancanti ...).
  3. Ora, copia tutti i file DLL da Qt (nel mio caso erano in C: \ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ bin) in questa cartella.
  4. Prova a eseguire di nuovo, probabilmente funzionerà bene.
  5. Inizia a eliminare progressivamente e prova ogni volta che l'eseguibile funziona ancora, cercando di lasciare i file DLL minimi necessari.

Quando hai tutti i file DLL nella stessa cartella, è più facile trovare quali di essi non sono validi (XML, WebKit, ... comunque ...), e di conseguenza questo metodo non richiede più di cinque minuti.


Se le DLL che mancano sono assembly GAC, questo metodo ti aiuterà a identificare quali DLL mancano (i messaggi di errore dovrebbero dirti quale assembly non può essere caricato), quindi dovrai capire su quale toolkit o framework installare la macchina per metterli nel GAC (o includerli con la tua distribuzione).
rcabr,

2
questo funzionerà solo per le dipendenze DLL dirette caricate all'avvio. se il tuo programma o DLL caricherà alcune DLL ritardate o dinamicamente non potrai trovarle con il tuo approccio.
A. Binzxxxxxx,

Nota anche che farlo in questo modo rende l'applicazione sensibile all'ordine della variabile PATH, caricando le versioni del sistema in alcuni casi e quelle nelle cartelle locali in altri. M $ chiama questo un problema di sicurezza, ma francamente è colpa loro se si usa il CWD in un sacco: support.microsoft.com/en-us/kb/2389418
meawoppl

3
Ciò non dovrebbe essere fatto manualmente. C'è uno windeployqtstrumento per questo, vedi ad esempio stackoverflow.com/a/33292008/4023446
Orest Hera

1
@OrestHera windeployqtspesso copia file non necessari.

16

Ho appena risolto lo stesso problema.

Dipendenza Walker è fuorviante in questo caso e mi ha fatto perdere tempo. Pertanto, l'elenco di file DLL "mancanti" dal primo post non è utile e probabilmente è possibile ignorarlo.

La soluzione è trovare i riferimenti che il tuo progetto sta chiamando e verificare se sono realmente installati sul server.

@Ben Brammer, non è importante quali file .ocx mancano tre, perché mancano solo per il progetto Leo T Abraham. Il tuo progetto probabilmente chiama altri file DLL.

Nel mio caso, non si trattava di tre file .ocx, ma mancava il file DLL del connettore MySQL. Dopo l'installazione di MySQL Connector per .NET sul server, il problema è scomparso.

Quindi, in breve, la soluzione è: controlla se ci sono tutti i riferimenti del tuo progetto.


12

Come accennato, DCOMP fa parte dei ridistribuibili VC ++ (implementando il runtime OpenMP) ed è l'unico componente veramente mancante. Tutto il resto sono segnalazioni false.

In particolare, API-MS-WIN-XXXX.DLL sono insiemi di API - in sostanza, un ulteriore livello di indiretta delle chiamate introdotto gradualmente a partire da Windows 7. Lo sviluppo di Walker di dipendenza apparentemente si è fermato molto prima e non è in grado di gestire correttamente i set di API.

Quindi non c'è nulla di cui preoccuparsi lì. Non ti perdi più nulla.

Un'alternativa migliore per trovare i file DLL realmente necessari che mancano (se questo è davvero il problema) è eseguire Process Monitor e fare un passo indietro dall'errore, cercando sequenze di sonde non riuscite per un file DLL specifico in tutto il percorso di sistema.


+1 per ProcessMonitor. È un download gratuito da Microsoft. Collegati al processo matlab e puoi vedere tutto quello che sta succedendo, inclusi i carichi di dll
Janus

6

Ho anche riscontrato questo problema, ma la soluzione che sembra essere un thread comune qui, e che ho visto altrove sul web, è "[reinstallare] il pacchetto ridistribuibile". Tuttavia, per me ciò non funziona, poiché si è verificato il problema durante l'esecuzione del programma di installazione per il nostro prodotto (che installa il pacchetto ridistribuibile) per testare le nuove splendide build di Visual Studio 2015.

Il problema si è verificato perché i file DLL elencati non si trovano nel percorso di installazione di Visual Studio (ad esempio, C: \ Programmi (x86) \ Microsoft Visual Studio 14.0 \ VC \ redist) e quindi non erano stati aggiunti all'installazione. Queste api-ms-win- * dll vengono installate in un percorso di installazione dell'SDK di Windows 10 come parte dell'installazione di Visual Studio 2015 (ad es. C: \ Programmi (x86) \ Windows Kits \ 10 \ Redist).

L'installazione su Windows 10 ha funzionato bene, ma l'installazione su Windows 7 ha richiesto l'aggiunta di questi file DLL all'installazione del nostro prodotto. Per ulteriori informazioni, vedere Aggiornamento per Universal C Runtime in Windows che descrive l'aggiunta di queste dipendenze causate da Visual Studio 2015 e fornisce download per varie piattaforme Windows; vedi anche Introduzione a Universal CRT che descrive la riprogettazione delle librerie CRT. Di particolare interesse è il punto 6 nella sezione intitolata Software di distribuzione che utilizza Universal CRT :

Aggiornato l'11 settembre 2015: è supportata la distribuzione App-local di Universal CRT. Per ottenere i binari per la distribuzione locale dell'app, installare Windows Software Development Kit (SDK) per Windows 10. I binari verranno installati in C: \ Programmi (x86) \ Windows Kits \ 10 \ Redist \ ucrt. Dovrai copiare tutte le DLL con la tua app (tieni presente che l'insieme di file DLL è diverso nelle diverse versioni di Windows, quindi devi includere tutti i file DLL affinché il tuo programma possa essere eseguito su tutte le versioni supportate di Windows).


5

Questo contributo non risponde realmente alla domanda iniziale, ma tenendo conto del tasso di successo di questo thread, suppongo che ci siano alcune persone che affrontano il problema che le librerie API-MS-WIN-CORE non possono essere trovate.

Sono stato in grado di risolvere un problema in cui la mia applicazione ha rifiutato di iniziare con il messaggio di errore che API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL non viene trovato semplicemente aggiornando Visual Studio.

Non penso che il mio ambiente di build (Windows 7 Pro SP1, Visual Studio Ultimate 2012) sia stato completamente incasinato, ha funzionato bene per la maggior parte dei miei progetti. Ma in alcune circostanze molto specifiche ho ricevuto il messaggio di errore (vedi sotto).

Dopo aver aggiornato Visual Studio 11 dalla versione iniziale del CD (ho dimenticato di cercare il numero della versione) alla versione 11.0.61030.00 Aggiornamento 4, anche il progetto interrotto era di nuovo in esecuzione.

Messaggio di errore all'avvio dell'applicazione


Il collegamento è (effettivamente) interrotto ( "Siamo spiacenti, questo download non è più disponibile." ).
Peter Mortensen,

@PeterMortensen Ho trovato questo link all'aggiornamento 5 , ma non ho idea se la soluzione suggerita sia ancora valida. L'aggiornamento 4 non è più disponibile. Ecco un elenco di aggiornamenti per VS2012 . La data di fine del prodotto riportata è 10/2023.
normanio,

3

Questo ha risolto il problema per me:

Disinstallare il pacchetto ridistribuibile di Visual Studio 2010 se è già installato, quindi installare l' SDK di Microsoft Windows 7 .


1
Le note di installazione suggeriscono di disinstallare i pacchetti di ridistribuzione in quanto contengono versioni ridondanti delle DLL di cui sopra e causano confusione di collegamento dinamico per il codice e altre forme di Win7 herp-derp. Perché non lo farà durante l'installazione, possiamo archiviare in sicurezza come #iwishihadarealpackagemanager.
meawoppl

1
ha funzionato anche per me. così tante ore passate su di esso, intallando .net directx, ma reinstallando msvc ++ ha funzionato
NoWomenNoCry

2

Ho risolto il problema Quando ho registrato i file OCX, l'ho eseguito con la finestra di comando che era stata eseguita come amministratore.


1

Per chiunque venisse qui, ma con un problema con Photoshop : la mia soluzione era disinstallare il primo ridistribuibile x86 MS 64 e 64 entrambi. Quindi installarne uno appropriato per la versione e l'architettura di Windows (86 o 64).



0

Ho avuto lo stesso problema. Dopo aver trascorso ore a cercare sul web, ho trovato una soluzione per me.

Ho copiato il file combase.dll (C: \ Windows \ System32) nella cartella di rilascio e il problema è stato risolto.


2
Installare dll casuali sul tuo percorso è una BAD IDEA.
meawoppl

0

Sono venuto qui con questo problema che si verifica, dopo aver provato una nuova installazione OEM di Windows 7, l'aggiornamento a Windows 10.

Dopo alcune ricerche nei forum di Microsoft e simili, ho trovato la seguente soluzione che ha funzionato per me:

Sostituisci C:\Windows10Upgrade\wimgapi.dllcon quello diC:\Windows\System32\wimgapi.dll


Installare dll casuali sul tuo percorso è una BAD IDEA.
meawoppl

Certo che lo è, ma quando si tratta di una nuova installazione, cosa c'è da rompere? : D
djsmiley2kStaysInside

0

Suggerisco anche di verificare quanta memoria è attualmente in uso.

Si scopre che l'impossibilità di trovare questi file DLL è stato il primo sintomo manifestato quando si tenta di eseguire un programma (o eseguire o eseguire il debug) in Visual Studio.

Dopo oltre mezz'ora con molti grattacapi, la ricerca sul web, l'esecuzione di Process Monitor e Task Manager , e dipende, un programma completamente diverso che era stato in esecuzione dall'inizio del tempo ha riferito che "la memoria è insufficiente; provare a interrompere alcuni programmi" o alcuni di questi. Dopo aver ucciso Firefox, Thunderbird, Process Monitor e dipende, tutto ha funzionato di nuovo.


0

Solo per confermare le risposte qui, la mia risoluzione era quella di copiare la DLL che non si stava caricando E il file ocx che lo accompagnava nella cartella system32, che ha risolto il mio problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.