Windows 7, 64 bit, masalah DLL


268

Saya punya masalah dengan executable kami. Saya menjalankan C ++ 32-bit ini yang dapat dieksekusi pada kotak pengembangan Windows 7 64-bit saya yang juga memiliki semua aplikasi Microsoft (Visual Studio 2008 + 2010, TFS, SDK, Microsoft Office) ... Dan masih berjalan dengan baik.

Sekarang saya mendapatkan instalasi klien dari program yang sama dan diminta untuk mengujinya dengan instalasi Windows 7 yang bersih. Jadi saya mendapat satu VMware Windows 7 64-bit dan memperbaruinya ke Windows 7 SP 1 (versi yang sama dengan yang dikembangkan oleh kotak pengembang saya). Tetapi sementara di kotak pengembang saya semuanya baik-baik saja, program tidak bekerja dengan kotak VMware (uji coba 30 hari).

X86 Dependency Walker memberi tahu saya bahwa file DLL berikut tidak ada:

  • 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

Saya mencari Google untuk API-MS-WIN -... DLL file dan menemukan mereka seharusnya sudah menjadi bagian dari Windows 7 (beberapa situs mengklaim milik Windows 8 dan Windows Server 2012 sekalipun).

Saya sudah mencoba perbaikan yang disarankan yang saya temukan, yaitu:

  • menjalankan 'sfc / scannow'
  • menginstal executable runtime Visual Studio 2008 SP1

Tapi itu tidak menyelesaikan apa pun. :-(

Catatan: Kotak pengembangan saya tidak memilikinya, dan sepertinya tidak membutuhkannya. Sebagai contoh, user32.dll di kotak saya tidak terhubung dengan salah satunya, sedangkan instalasi pada VMware tidak.

Adakah cara untuk memperbaiki masalah ini? Saya mencoba mencari unduhan / perbaikan yang sesuai pada halaman Microsoft, tetapi saya gagal.


Setelah menyelesaikan masalah saya, saya ingin melaporkan apa yang saya temukan, dan saya tidak dapat memposting ini sebagai jawaban karena pertanyaan telah ditutup.

Sebenarnya semua file DLL dilaporkan hilang oleh alat Ketergantungan Walker, yaitu mereka

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

ketik file DLL bukan bagian dari masalah yang sebenarnya.

Dalam kasus saya, registrasi tiga file OCX hilang dan setelah itu semuanya baik-baik saja, BUT Dependency Walker tool masih mendaftar semua file DLL yang sama seperti sebelumnya bahkan ketika program sedang berjalan dengan baik sekarang.

Inti dari itu: Seperti yang dinyatakan orang lain, alat ini agak ketinggalan zaman sekarang dan tidak selalu berfungsi dengan baik dengan OS yang lebih baru. Jadi tetap buka mata dan jangan sampai disesatkan dengan melewatkan 'API-MS-WIN-CORE-COM-L1-1-0.DLL', ... masalahnya mungkin terletak di tempat lain.


1
DirectComposition tidak tersedia pada Windows 7 sejauh yang saya tahu (DCOMP.DLL).
Brian

156
Bagaimana kalau membuka kembali ini? Pencarian Google saya membawa saya ke pertanyaan ini hanya 20 jam setelah ditutup karena "tidak mungkin membantu pengunjung di masa depan" ...
Christian Severin

27
3 file ocx mana yang harus Anda daftarkan, dan yang lebih penting, bagaimana Anda mengetahui hal itu? Saya sudah terjebak dalam hal ini selama beberapa hari sekarang
Ben Brammer

2
Hai semua. Saya pikir saya telah memaku yang ini (lihat di bawah), tetapi sebagai catatan, Anda dapat dengan aman mengabaikan kegagalan untuk menautkan ke IESHIMS.DLL, dan GPSVC.DLL. Muncul pada dasarnya semua yang saya kompilasi di Win7, dan tampaknya tidak memiliki konsekuensi pada fungsi. Pengalaman ini diambil dari sekitar 30+ binari sekarang. desah aku benci-benci-benci melakukan dev jendela untuk alasan seperti ini.
meawoppl

3
Perubahan kernel Windows 7 yang mengarah ke api-ms-win- * DLL dijelaskan dengan cukup baik di sini nirsoft.net/articles/windows_7_kernel_architecture_changes.html - saya pikir DependencyWalker tidak bisa menangani perubahan ini - jadi jangan terlalu khawatir tentang hal itu. Dari MS: msdn.microsoft.com/en-us/library/hh802935%28v=vs.85%29.aspx
x29a

Jawaban:


63

Masalah ini terkait dengan tidak adanya Visual Studio "paket redistributable." Tidak jelas mana yang hilang berdasarkan dependensi berjalan, tetapi saya akan mencoba yang sesuai dengan versi kompiler Anda terlebih dahulu dan melihat apakah semuanya berjalan dengan baik:

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

Saya mengalami masalah ini karena saya menggunakan kompiler Visual Studio, tetapi tidak lingkungan Visual Studio penuh.


Akan berani menyuntikkan tautan baru di sini: Unduhan Visual C ++ terbaru yang didukung . Stein Åsmul, 29.11.2018 .



1
Juga, sepertinya ini bisa disebabkan oleh menginstal paket yang dapat didistribusikan kembali pada beberapa versi Win 7. Terima kasih m $.
meawoppl

Saya juga punya masalah dengan ini dan percaya ada beberapa jalur untuk memperbaikinya. Dalam kasus saya, saya perhatikan bahwa kompilasi dengan konfigurasi debug menyebabkan com dll saya tidak mendaftar. Namun, ketika saya mengubah konfigurasi saya untuk melepaskan, saya dapat memiliki pendaftaran bersih. Lingkungan saya adalah VS 2012. Dan saya memang menyalin file redist (versi x64) yang tepat ke folder yang sama dengan com saya dll.
Jim Kennedy

NB beberapa SDK / DDK win yang lebih baru hadir dengan beberapa juga!
meawoppl

1
VS2015 vcredist _ * .exe menginstal DLL ini, tetapi metode lain, seperti MSM yang disertakan dengan VS tidak. vcredist menyertakan DLL ini, dan Anda membutuhkan platform minimum yang disyaratkan. (Catatan saya harus menginstal windows 7 sp1 dua kali agar bisa berlaku - WU berbohong!) Microsoft.com/en-us/download/details.aspx?id=48234
GilesDMiddleton

19

Saya baru saja menyelesaikan masalah yang sama dengan C ++ Qt 5 dan Windows 7 64 bit dengan MSCVC 2012.

Pada awalnya saya pikir itu adalah masalah file MSVC / Windows DLL, tetapi seperti yang dikatakan BorisP, masalahnya ada pada dependensi proyek saya. Kuncinya adalah " Bagaimana mengetahui dependensi proyek Anda di Qt 5? ".

Karena saya tidak menemukan cara yang jelas untuk mengetahuinya ( Dependency Walker tidak banyak membantu saya ...), saya mengikuti "prosedur terbalik" berikutnya yang membutuhkan waktu tidak lebih dari 5 menit dan menghindari banyak sakit kepala dengan DLL dependensi file:

  1. Kompilasi proyek Anda dan bawa file yang dapat dieksekusi ke folder kosong: myproject.exe
  2. Coba jalankan, itu akan mengambil kesalahan (hilang file DLL ...).
  3. Sekarang, salin semua file DLL dari Qt (dalam kasus saya mereka berada di C: \ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ bin) ke folder ini.
  4. Coba jalankan lagi, itu mungkin akan berfungsi dengan baik.
  5. Mulai untuk menghapus secara progresif dan mencoba setiap kali executable Anda masih berfungsi, mencoba untuk meninggalkan file DLL minimum yang diperlukan.

Ketika Anda memiliki semua file DLL di folder yang sama, lebih mudah untuk menemukan mana di antara mereka yang tidak valid (XML, WebKit, ... apa pun ..), dan akibatnya metode ini tidak memakan waktu lebih dari lima menit.


Jika DLL yang hilang adalah rakitan GAC, metode ini akan membantu Anda mengidentifikasi DLL mana yang hilang (pesan kesalahan akan memberi tahu Anda rakitan mana yang tidak dapat dimuat), dan kemudian Anda harus mencari tahu di mana toolkit atau kerangka kerja untuk menginstal mesin untuk memasukkannya ke GAC (atau sertakan dengan distribusi Anda).
rcabr

2
ini hanya akan bekerja untuk dependensi dll langsung yang dimuat saat startup. jika program Anda atau dll akan memuat beberapa dll tertunda atau secara dinamis Anda tidak dapat menemukannya dengan pendekatan Anda.
A. Binzxxxxxx

NB juga bahwa melakukannya dengan cara ini membuat aplikasi Anda peka terhadap urutan variabel PATH, memuat versi sistem dalam beberapa kasus dan yang di folder lokal pada yang lain. M $ menyebut ini masalah keamanan, tetapi terus terang itu salah mereka karena menggunakan CWD dalam banyak: support.microsoft.com/en-us/kb/2389418
meawoppl

3
Itu tidak harus dilakukan secara manual. Ada windeployqtalat untuk itu, lihat misalnya stackoverflow.com/a/33292008/4023446
Orest Hera

1
@OrestHera windeployqtsering menyalin file yang tidak perlu.

16

Saya baru saja menyelesaikan masalah yang sama.

Ketergantungan Walker menyesatkan dalam kasus ini dan menyebabkan saya kehilangan waktu. Jadi, daftar file DLL "hilang" dari posting pertama tidak membantu, dan Anda mungkin dapat mengabaikannya.

Solusinya adalah menemukan referensi mana yang dipanggil oleh proyek Anda dan periksa apakah referensi tersebut benar-benar diinstal pada server.

@ Ben Brammer, tidak penting tiga file .ocx yang hilang, karena mereka hanya hilang untuk proyek Leo T Abraham. Proyek Anda mungkin memanggil file DLL lainnya.

Dalam kasus saya, itu bukan tiga file .ocx, tetapi hilang file DLL konektor MySQL. Setelah menginstal Konektor MySQL untuk .NET di server, masalahnya hilang.

Jadi, singkatnya, solusinya adalah: periksa apakah semua referensi proyek Anda ada di sana.


12

Seperti disebutkan, DCOMP adalah bagian dari redistributables VC ++ (menerapkan runtime OpenMP) dan merupakan satu-satunya komponen yang benar-benar hilang. Semua sisanya adalah laporan palsu.

Khususnya API-MS-WIN-XXXX.DLL adalah set-API - pada dasarnya, tingkat tipuan panggilan tambahan diperkenalkan secara bertahap sejak Windows 7. Pengembangan Ketergantungan Walker tampaknya dihentikan jauh sebelum itu, dan itu tidak dapat menangani set API dengan benar.

Jadi tidak ada yang perlu dikhawatirkan di sana. Anda tidak kehilangan apa pun lagi.

Alternatif yang lebih baik untuk menemukan file DLL yang benar-benar dibutuhkan yang hilang (jika memang itu masalahnya) adalah menjalankan Process Monitor dan mundur dari kegagalan, mencari urutan probe gagal untuk file DLL tertentu di semua jalur sistem.


+1 Untuk ProcessMonitor. Ini unduhan gratis dari Microsoft. Lampirkan ke proses matlab dan Anda dapat melihat semua yang terjadi, termasuk dll-load
Janus

6

Saya juga mengalami masalah ini, tetapi solusi yang tampaknya menjadi benang merah di sini, dan saya lihat di tempat lain di web, adalah "menginstal ulang paket yang dapat didistribusikan". Namun, bagi saya itu tidak berhasil, karena timbul masalah ketika menjalankan pemasang untuk produk kami (yang menginstal paket yang dapat didistribusikan) untuk menguji Visual Studio 2015 baru kami yang mengkilap.

Masalah muncul karena file DLL yang terdaftar tidak terletak di jalur instal Visual Studio (misalnya, C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ redist) dan dengan demikian belum ditambahkan ke instal. Dll api-ms-win- * ini diinstal ke jalur instal Windows 10 SDK sebagai bagian dari instalasi Visual Studio 2015 (mis. C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist).

Menginstal pada Windows 10 bekerja dengan baik, tetapi menginstal pada Windows 7 diperlukan menambahkan file DLL ini untuk menginstal produk kami. Untuk informasi lebih lanjut, lihat Pembaruan untuk Universal C Runtime di Windows yang menjelaskan penambahan dependensi yang disebabkan oleh Visual Studio 2015 dan menyediakan unduhan untuk berbagai platform Windows; juga lihat Memperkenalkan Universal CRT yang menjelaskan desain ulang perpustakaan CRT. Yang menarik adalah item 6 di bawah bagian berjudul Mendistribusikan Perangkat Lunak yang menggunakan Universal CRT :

Diperbarui 11 September 2015: Penempatan aplikasi-lokal dari Universal CRT didukung. Untuk mendapatkan binari untuk penyebaran aplikasi-lokal, instal Kit Pengembangan Perangkat Lunak Windows (SDK) untuk Windows 10. Binari akan diinstal ke C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist \ ucrt. Anda perlu menyalin semua DLL dengan aplikasi Anda (perhatikan bahwa set file DLL yang diperlukan berbeda pada versi Windows yang berbeda, jadi Anda harus menyertakan semua file DLL agar program Anda dapat berjalan di semua versi yang didukung Windows).


5

Kontribusi ini tidak benar-benar menjawab pertanyaan awal, tetapi dengan mempertimbangkan hit-rate dari utas ini saya berasumsi bahwa ada beberapa orang yang berurusan dengan masalah yang tidak dapat ditemukan oleh perpustakaan-perpustakaan API-MS-WIN-CORE.

Saya dapat memecahkan masalah di mana aplikasi saya menolak untuk memulai dengan pesan kesalahan yang API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL tidak ditemukan dengan hanya memperbarui Visual Studio.

Saya tidak berpikir bahwa lingkungan build saya (Windows 7 Pro SP1, Visual Studio Ultimate 2012) benar-benar kacau, itu berfungsi dengan baik untuk sebagian besar proyek saya. Tetapi dalam beberapa keadaan yang sangat spesifik saya mendapat pesan kesalahan (lihat di bawah).

Setelah memperbarui Visual Studio 11 dari CD-Version awal (saya lupa mencari nomor versi) ke versi 11.0.61030.00 Perbarui 4 juga proyek rusak sedang berjalan lagi.

Pesan kesalahan saat startup aplikasi


Tautan ini (secara efektif) rusak ( "Maaf, unduhan ini tidak lagi tersedia." ).
Peter Mortensen

@PeterMortensen Saya menemukan tautan ini ke Pembaruan 5 , tetapi tidak tahu apakah solusi yang disarankan masih berlaku. Pembaruan 4 tidak lagi tersedia. Di sini daftar pembaruan untuk VS2012 . Tanggal akhir produk yang dilaporkan adalah 10/2023.
normanius

3

Ini memecahkan masalah bagi saya:

Hapus paket Visual Studio 2010 yang dapat didistribusikan kembali jika Anda sudah menginstalnya, dan kemudian instal Microsoft Windows 7 SDK .


1
Catatan instalasi menyarankan Anda menghapus instalasi paket redistribusi karena mengandung versi berlebihan dari DLL di atas dan akan menyebabkan kebingungan penghubung dinamis untuk kode dan bentuk lain dari Win7 herp-derp. Mengapa ini tidak akan melakukan ini untuk Anda selama instalasi, kami dapat mengajukan dengan aman sebagai #iwishihadarealpackagemanager.
meawoppl

1
bekerja untuk saya juga. begitu banyak waktu dihabiskan untuk itu, menjalankan .net directx, tetapi menginstal ulang msvc ++ berhasil
NoWomenNoCry

2

Saya memecahkan masalah. Ketika saya mendaftarkan file OCX, saya menjalankannya dengan Command Window yang telah dieksekusi sebagai administrator.


1

Bagi siapa saja yang datang ke sini, tetapi dengan masalah Photoshop : solusi saya adalah menghapus instalasi MS VC ++ x86 dan 64 pertama yang dapat didistribusikan kembali, keduanya. Kemudian instal yang sesuai dengan versi dan arsitektur Windows (86 atau 64).



0

Saya memiliki masalah yang sama. Setelah menghabiskan berjam-jam mencari di web, saya menemukan solusi untuk saya.

Saya menyalin file file combase.dll (C: \ Windows \ System32) ke folder rilis, dan itu menyelesaikan masalah.


2
Instalasi dll acak di jalur Anda adalah BAD IDEA.
meawoppl

0

Saya datang ke sini dengan masalah ini terjadi, setelah mencoba menginstal OEM Windows 7 baru, upgrade ke Windows 10.

Setelah beberapa pencarian di forum Microsoft dan semacamnya, saya menemukan solusi berikut yang bekerja untuk saya:

Ganti C:\Windows10Upgrade\wimgapi.dlldengan yang dariC:\Windows\System32\wimgapi.dll


Instalasi dll acak di jalur Anda adalah BAD IDEA.
meawoppl

Tentu saja, tetapi ketika itu adalah instalasi yang benar-benar baru, apa yang bisa dihancurkan? : D
djsmiley2kStaysInside

0

Saya sarankan juga memeriksa berapa banyak memori yang sedang digunakan.

Ternyata ketidakmampuan untuk menemukan file DLL ini adalah gejala pertama yang ditunjukkan ketika mencoba menjalankan program (baik dijalankan atau debug) di Visual Studio.

Setelah lebih dari setengah jam dengan banyak goresan kepala, mencari di web, menjalankan Process Monitor , dan Task Manager , dan tergantung, program yang sama sekali berbeda yang telah berjalan sejak awal waktu melaporkan bahwa "memori rendah; coba hentikan beberapa program" atau semacamnya. Setelah membunuh Firefox, Thunderbird, Process Monitor, dan tergantung, semuanya bekerja kembali.


0

Hanya untuk mengkonfirmasi jawaban di sini, resolusi saya adalah menyalin DLL yang tidak memuat DAN file ocx yang menyertainya ke folder system32, yang menyelesaikan masalah saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.