Windows 7, 64 bit, DLL sorunları


268

Yürütülebilir dosyamızla ilgili bir sorunum var. Bu C ++ 32-bit yürütülebilir dosyayı, tüm bu Microsoft uygulamalarına (Visual Studio 2008 + 2010, TFS, SDK, Microsoft Office) de sahip olan Windows 7 64-bit geliştirme kutusunda çalıştırıyorum ... Ve hala iyi çalışıyor.

Şimdi aynı programın istemci kurulumunu aldım ve temiz bir Windows 7 kurulumuyla test etmem istendi. Böylece bir Windows 7 64-bit VMware aldım ve Windows 7 SP 1'e güncelledim (geliştirici kutumun ayarladığı sürümle aynı). Ancak geliştirici kutumda her şey yolundaysa, program VMware (30 günlük deneme) kutusuyla çalışmaz.

X86 Dependency Walker bana aşağıdaki DLL dosyalarının eksik olduğunu söylüyor:

  • API-MS-WIN-CORE-COM-L1-1-0.DLL
  • API-MS-WIN-CORE-WINRT-HATA-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-İP-L1-1-0.DLL
  • API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
  • DCOMP.DLL
  • GPSVC.DLL
  • IESHIMS.DLL

Bu API-MS-WIN -... DLL dosyaları için googled ve aslında Windows 7'nin bir parçası olması gerektiğini buldum (bazı siteler Windows 8 ve Windows Server 2012'ye ait olduğunu iddia ediyor olsa da).

Zaten bulduğum önerilen düzeltmeleri denedim:

  • 'sfc / scannow' çalıştırıyor
  • Studio 2008 SP1 çalışma zamanı yürütülebilir dosyalarını yükleme

Ama bu hiçbir şeyi çözmedi. :-(

Yan not: Geliştirme kutumda da yok ve ihtiyaç duymuyor gibi görünüyor. Örneğin, VMware üzerindeki yükleme yaparken, benim kutusundaki user32.dll bunlardan birine bağlanmaz.

Bu sorunu nasıl çözeceğiniz hakkında bir fikriniz var mı? Microsoft sayfalarında uygun bir indirme / düzeltme bulmaya çalıştım, ancak başarısız oldum.


Sorunumu çözdükten sonra öğrendiklerimi bildirmek istedim ve soru kapatıldığı için bunu cevap olarak gönderemiyorum.

Aslında Dependency Walker aracı tarafından eksik bildirilen tüm DLL dosyaları, yani

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

DLL dosyaları yazın asıl sorunun bir parçası değildi.

Benim durumumda, üç OCX dosyasının kaydı eksikti ve bundan sonra her şey yolundaydı, ancak AMA Bağımlılık Walker aracı, program şimdi iyi çalışıyorken bile daha önce olduğu gibi aynı DLL dosyalarını listeledi.

Bunun özü: Başka bir yerde belirtildiği gibi, araç şimdiye kadar biraz tarihli ve her zaman daha yeni bir işletim sistemi ile düzgün çalışmıyor. Böylece bir göz açık tutmak ve 'API-MS-WIN-CORE-COM-L1-1-0.DLL' eksik eksik almayın, ... sorun muhtemelen tamamen başka bir yerde yatıyor.


1
DirectComposition bildiğim kadarıyla (DCOMP.DLL) Windows 7'de mevcut değil.
Brian

156
Bunu tekrar açmaya ne dersiniz? Google aramam beni, "gelecekteki ziyaretçilere yardım etme olasılığı düşük" olduğu için kapatıldıktan 20 saat sonra bu soruya yönlendirdi ...
Christian Severin

27
hangi 3 ocx dosyasını kaydettirmeniz gerekiyordu ve daha da önemlisi, bunu nasıl anladınız? Birkaç gündür buna takılı kaldım
Ben Brammer

2
Hey millet. Ben bu bir çivilenmiş düşünüyorum (aşağıya bakın), ancak bir yan not olarak, güvenle IESHIMS.DLL ve GPSVC.DLL bağlantı başarısız göz ardı edebilirsiniz. Temel olarak Win7'de derlediğim her şeyde ortaya çıkıyor ve işlev üzerinde hiçbir sonucu yok gibi görünüyor. Bu deneyim artık yaklaşık 30'dan fazla ikili dosyadan alınmıştır. sigh Bunun gibi nedenlerle windows dev yapmaktan nefret ediyorum.
meawoppl

3
Api-ms- win- * DLL'lere yol açan Windows 7 çekirdek değişiklikleri burada oldukça iyi açıklanmıştır nirsoft.net/articles/windows_7_kernel_architecture_changes.html - DependencyWalker sadece bu değişiklikleri ele alamaz - bu yüzden çok fazla endişelenmeyin. MS'den: msdn.microsoft.com/en-us/library/hh802935%28v=vs.85%29.aspx
x29a

Yanıtlar:


63

Bu sorun, Visual Studio "yeniden dağıtılabilir paketi" eksik ile ilgilidir. Hangi bağımlılık yürüyüş dayalı eksik olan belli değil, ama önce derleyici sürümüne karşılık gelen denemek ve şeyler düzgün çalışıp çalışmadığını görmek:

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

Bu sorunla karşılaştım çünkü Visual Studio derleyicilerini kullanıyorum, ancak tam Visual Studio ortamını kullanmıyorum.


Burada yeni bir bağlantı enjekte etmeye cesaret: En son desteklenen Visual C ++ indirmeleri . Stein Åsmul, 29.11.2018 .



1
Ayrıca, Win 7'nin bazı sürümlerine yeniden dağıtılabilir paketleri yükleyerek bu durumdan kaynaklanıyor olabilir. Teşekkürler m $.
meawoppl

Ben de bu konuda sorunları vardı ve bunu düzeltmek için birden fazla yol olduğuna inanıyorum. Benim durumumda, hata ayıklama yapılandırması ile derleme com dll kayıt olmamasına neden olduğunu fark ettim. Ancak, yapılandırmamı yayınlanacak şekilde değiştirdiğimde temiz bir kayda sahip olabildim. Benim ortam VS 2012. Ve ben doğru redist (x64 sürümü) dosyaları benim com dll ile aynı klasöre kopyalayın.
Jim Kennedy

Not yeni SDK / DDK kazanmak bazı bunlarla da geliyor!
meawoppl

1
VS2015 vcredist _ *. Exe bu DLL'leri yükler, ancak VS ile sağlanan MSM'ler gibi diğer yöntemler yüklemez. vcredist bu DLL'leri içerir ve gereken minimum platforma ihtiyacınız vardır. (Bu etkili olması için 7 sp1 iki kez pencere takmak için vardı Not - WU yalan!) Microsoft.com/en-us/download/details.aspx?id=48234
GilesDMiddleton

19

Ben sadece MSCVC 2012 ile C ++ Qt 5 ve Windows 7 64 bit ile aynı sorunu çözdüm.

Başlangıçta bunun bir MSVC / Windows DLL dosyası sorunu olduğunu düşündüm, ancak BorisP'nin dediği gibi, sorun benim proje bağımlılıklarımdaydı. Anahtar " Qt 5'teki proje bağımlılıklarınızı nasıl bilebilirsiniz? "

Bunu tanımak için net bir yol bulamadığım için ( Bağımlılık Walker bana çok yardımcı olmadı ...), 5 dakikadan fazla sürmeyen ve DLL ile baş ağrısından kaçınan "ters prosedürü" takip ettim. dosya bağımlılıkları:

  1. Projenizi derleyin ve yürütülebilir dosyayı boş bir klasöre taşıyın : myproject.exe
  2. Yürütmeyi deneyin, bir hata alır (DLL dosyaları eksik ...).
  3. Şimdi, tüm DLL dosyalarını Qt'den (benim durumumda C: \ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ bin'de) bu klasöre kopyalayın.
  4. Tekrar çalıştırmayı deneyin, muhtemelen iyi çalışacaktır.
  5. Aşamalı olarak silmeye başlayın ve yürütülebilir dosyanız hala çalıştığında gerekli minimum DLL dosyalarını bırakmaya çalışın.

Aynı klasördeki tüm DLL dosyalarına sahip olduğunuzda, hangilerinin geçerli olmadığını (XML, WebKit, ... neyse ..) bulmak daha kolaydır ve sonuç olarak bu yöntem beş dakikadan fazla sürmez.


Eksik DLL'ler GAC derlemeleriyse, bu yöntem hangi DLL'lerin eksik olduğunu belirlemenize yardımcı olur (hata iletileri hangi derlemenin yüklenemediğini söylemelidir) ve sonra hangi araç setini veya çerçeveyi yükleyeceğinizi anlamanız gerekir makineyi GAC'ye yerleştirmek (veya dağıtımınıza dahil etmek).
rcabr

2
Bu sadece başlangıçta yüklenen doğrudan dll bağımlılıkları için çalışacaktır. Eğer program veya dlls gecikmeli veya dinamik olarak bazı dll yükleyecekse yaklaşımınızla bulamıyor.
A. Binzxxxxxx

NB ayrıca bu şekilde yaptığınızda, uygulamayı PATH değişkeninin sırasına duyarlı hale getirir, bazı durumlarda sistem sürümlerini ve diğerlerinde yerel klasörlerde olanları yükler. M $ bunu bir güvenlik sorunu olarak adlandırıyor, ancak açıkçası CWD'yi yüklerde kullanma hatası: support.microsoft.com/en-us/kb/2389418
meawoppl

3
Bu elle yapılmamalıdır. Bunun için bir windeployqtaraç var, örneğin bkz. Stackoverflow.com/a/33292008/4023446
Orest Hera

1
@OrestHera windeployqtgenellikle gereksiz dosyaları kopyalar.

16

Aynı sorunu çözdüm.

Bağımlılık Walker bu durumda yanıltıcı ve zaman kaybetmeme neden oldu. Bu nedenle, ilk gönderideki "eksik" DLL dosyalarının listesi yardımcı olmaz ve muhtemelen göz ardı edebilirsiniz.

Solüsyon hangi referanslar bulmaktır sizin onlar gerçekten sunucuda yüklü olup olmadığını proje çağıran ve çek edilir.

@Ben Brammer, hangi üç .ocx dosyasının eksik olduğu önemli değil, çünkü sadece Leo T Abraham'ın projesi için eksikler. Projeniz muhtemelen diğer DLL dosyalarını çağırıyor.

Benim durumumda, üç .ocx dosyası değil, MySQL bağlayıcı DLL dosyası eksik. Sunucuya .NET için MySQL Bağlayıcısı yüklendikten sonra sorun ortadan kalktı.

Kısacası, çözüm: tüm proje referanslarınızın orada olup olmadığını kontrol edin.


12

Belirtildiği gibi, DCOMP VC ++ yeniden dağıtılabilirlerinin bir parçasıdır (OpenMP çalışma zamanını uygular) ve gerçekten eksik olan tek bileşendir. Geri kalan her şey yanlış raporlar.

Özellikle API-MS-WIN-XXXX.DLL olan API setleri - esasen, çağrı fazladan bir seviye Windows 7 beri kademeli olarak tanıtılan Bağımlılık Walker gelişme görünüşte bundan önce uzun durdurdu ve düzgün API setleri işleyemez.

Yani endişelenecek bir şey yok. Daha fazla bir şey kaçırmıyorsunuz.

Eksik olan gerçekten gerekli DLL dosyalarını bulmak için daha iyi bir alternatif (gerçekten de sorun varsa), tüm sistem yolunda belirli bir DLL dosyası için başarısız probların dizilerini aramak, İşlem İzleyicisi'ni çalıştırmak ve hatadan geriye doğru adım atmaktır.


+1 ProcessMonitor için. Microsoft'tan ücretsiz olarak indirilebilir. Matlab sürecine ekleyin ve dll-
Janus

6

Ben de bu sorunla karşılaştı, ancak burada ortak bir iş parçacığı gibi görünüyor çözüm ve web başka bir yerde gördüm, "yeniden dağıtılabilir paketi [yeniden] yükleyin. Ancak, benim için işe yaramaz, parlak yeni Visual Studio 2015 yapılarımızı test etmek için ürünümüz (yeniden dağıtılabilir paketi yükleyen) yükleyicisini çalıştırırken sorun ortaya çıktı.

Sorun, listelenen DLL dosyaları Visual Studio yükleme yolunda (örneğin, C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ redist) bulunmadığından ve yüklemeye eklenmediği için ortaya çıktı. Bu api-ms-win- * dll dosyaları, Visual Studio 2015 yüklemesinin bir parçası olarak bir Windows 10 SDK yükleme yoluna yüklenir (örn. C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist).

Windows 10'a yükleme iyi çalıştı, ancak Windows 7'ye yükleme, bu DLL dosyalarını ürün yüklememize eklemeyi gerektirdi. Daha fazla bilgi için, bkz . Visual Studio 2015'in neden olduğu bu bağımlılıkların eklenmesini açıklayan ve çeşitli Windows platformları için karşıdan yüklemeler sağlayan Evrensel C Çalışma Zamanı Güncelleştirmesi ; ayrıca bkz . CRT kitaplıklarının yeniden tasarımını açıklayan Evrensel CRT'nin Tanıtımı . Universal CRT kullanan Yazılım Dağıtma başlıklı bölümün 6. maddesi özellikle ilgi çekicidir :

Updated 11 Eylül 2015: Evrensel CRT App-yerel dağıtım desteklenmektedir. Uygulama yerel dağıtımı için ikili dosyaları edinmek üzere, Windows 10 için Windows Yazılım Geliştirme Seti'ni (SDK) yükleyin. İkili dosyalar C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist \ ucrt klasörüne yüklenecektir. Tüm DLL'leri uygulamanızla kopyalamanız gerekir (DLL dosya kümesinin gerekli olduğunu Windows'un farklı sürümlerinde farklı olduğunu unutmayın, bu nedenle programınızın desteklenen tüm sürümlerde çalışması için tüm DLL dosyalarını dahil etmeniz gerekir Windows).


5

Bu katkı ilk soruyu gerçekten cevaplamıyor, ancak bu iş parçacığının isabet oranını göz önünde bulundurarak, API-MS-WIN-CORE- kütüphanelerinin bulunamaması sorunuyla uğraşan çok az insan olduğunu varsayıyorum.

Benim uygulama API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL sadece Visual Studio güncelleştirerek bulunamadı hata iletisi ile başlamayı reddetti bir sorunu çözmek mümkün.

Yapım ortamımın (Windows 7 Pro SP1, Visual Studio Ultimate 2012) tamamen dağıldığını düşünmüyorum, çoğu projem için iyi çalıştı. Ancak bazı çok özel durumlarda hata mesajını aldım (aşağıya bakın).

Sonra Visual Studio 11 güncellenmesi ilk CD-Sürümden da kırık proje yeniden koşuyordu Güncelleme 4 sürümü 11.0.61030.00 (I sürüm numarasını aramak unuttum).

Uygulama başlatılırken hata mesajı


Bağlantı (etkin bir şekilde) bozuk ( "Üzgünüz, bu indirme artık mevcut değil." ).
Peter Mortensen

@PeterMortensen Güncelleme 5 için bu bağlantıyı buldum , ancak önerilen geçici çözüm hala geçerliyse hiçbir fikrim yok. Güncelleme 4 artık mevcut değil. Bir Buraya VS2012 için güncellemeleri listesini . Bildirilen ürün bitiş tarihi 10/2023'tür.
normanius

3

Bu benim için sorunu çözdü:

Daha önce yüklediyseniz Visual Studio 2010 yeniden dağıtılabilir paketini kaldırın ve sonra Microsoft Windows 7 SDK'yı yükleyin .


1
Yükleme notları, yukarıdaki DLL'lerin yedek sürümlerini içerdikleri ve kod ve Win7 herp-derp'in diğer biçimleri için dinamik bağlantı karışıklığına neden olacağı için yeniden dağıtım paketlerini kaldırmanızı önerir. Yükleme sırasında neden bunu sizin için yapmayacaktır, #iwishihadarealpackagemanager olarak güvenle dosyalayabiliriz.
meawoppl

1
benim için de çalıştı. üzerinde çok fazla saat harcadı, .net directx'i kurdu, ancak msvc ++ 'ı yeniden kurdu
NoWomenNoCry

2

Sorunu çözdüm. OCX dosyalarını kaydettiğimde, yönetici olarak çalıştırılan Komut Penceresi ile çalıştırdım.


1

Buraya gelen, ancak Photoshop sorunu olan herkes için : Benim çözümüm MS VC ++ yeniden dağıtılabilir ilk x86 ve 64'ü kaldırmaktı. Ardından Windows sürümüne ve mimarisine (86 veya 64) uygun olanı yükleyin.



0

Ben de aynı problemi yaşadım. Web'de arama yaparak saatler geçirdikten sonra benim için bir çözüm buldum.

Combase.dll dosyasını (C: \ Windows \ System32) yayın klasörüne kopyaladım ve sorunu çözdüm.


2
Rastgele dll yüklemek senin yol üzerinde bir kötü fikir.
meawoppl

0

Yeni bir Windows 7 OEM yüklemesini denedikten sonra, Windows 10'a yükselttikten sonra bu sorunla geldim.

Microsoft forumları ve benzeri bazı arama sonra benim için çalışan aşağıdaki çözümü buldum:

Değiştir C:\Windows10Upgrade\wimgapi.dllgelen biriyleC:\Windows\System32\wimgapi.dll


Rastgele dll yüklemek senin yol üzerinde bir kötü fikir.
meawoppl

Tabii ki, ama yepyeni bir kurulum olduğunda, kırılacak ne var? : D
djsmiley2kStaysInside

0

Şu anda ne kadar bellek kullanıldığını da kontrol etmenizi öneririm.

Bu DLL dosyalarını bulma yetersizliği, Visual Studio'da bir programı (çalıştır veya hata ayıklama) çalıştırmaya çalışırken gösterilen ilk belirti olduğu ortaya çıkıyor.

Çok fazla kafa kaşıyarak, web'de arama yaparak, İşlem Monitörü'nü ve Görev Yöneticisi'ni çalıştırdığından ve bağımlı olduğundan, zamanın başından beri çalışan tamamen farklı bir program "bellek az; bazı programları durdurmayı deneyin" veya bazıları. Firefox, Thunderbird, Process Monitor ve bağımlıları öldürdükten sonra her şey tekrar çalıştı.


0

Sadece burada cevapları onaylamak için benim çözümleme değil yükleme DLL ve beraberinde ocx dosyasını sistem32 klasörüne kopyalamak oldu, bu benim sorun çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.