Các vấn đề về Windows 7, 64 bit, DLL


268

Tôi có một vấn đề với thực thi của chúng tôi. Tôi đang chạy chương trình thực thi C ++ 32 bit này trên hộp phát triển Windows 7 64 bit của mình, cũng có tất cả các ứng dụng Microsoft đó (Visual Studio 2008 + 2010, TFS, SDK, Microsoft Office) ... Và nó vẫn chạy tốt.

Bây giờ tôi đã cài đặt máy khách của cùng một chương trình và được yêu cầu kiểm tra nó với bản cài đặt Windows 7 sạch. Do đó, tôi đã nhận được một Windows 7 64 bit và cập nhật nó lên Windows 7 SP 1 (phiên bản giống với hộp nhà phát triển của tôi đang điều chỉnh). Nhưng trong khi trên hộp nhà phát triển của tôi, mọi thứ đều ổn, chương trình không hoạt động với hộp VMware (30 ngày dùng thử).

Walker Dependency x86 đang nói với tôi rằng các tệp DLL sau bị thiếu:

  • 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

Tôi đã tìm kiếm các tệp API-MS-WIN -... DLL đó và thấy rằng chúng thực sự đã là một phần của Windows 7 (mặc dù một số trang web tuyên bố thuộc về Windows 8 và Windows Server 2012).

Tôi đã thử các bản sửa lỗi được đề xuất mà tôi tìm thấy, đó là:

  • chạy 'sfc / scannow'
  • cài đặt thực thi thời gian chạy Visual Studio 2008 SP1

Nhưng điều đó không giải quyết được gì. :-(

Lưu ý bên lề: Hộp phát triển của tôi cũng không có chúng và dường như không cần chúng. Ví dụ: user32.dll trên hộp của tôi không liên kết với một trong số đó, trong khi cài đặt trên VMware thì có.

Bất kỳ ý tưởng về cách khắc phục vấn đề này? Tôi đã cố gắng tìm một bản tải xuống / sửa lỗi phù hợp trên các trang của Microsoft, nhưng tôi đã thất bại.


Sau khi giải quyết vấn đề của mình, tôi muốn báo cáo những gì tôi đã tìm ra và tôi không thể đăng câu này dưới dạng câu trả lời vì câu hỏi đã bị đóng.

Trên thực tế, tất cả các tệp DLL được báo cáo bị thiếu bởi công cụ Dependency Walker, cụ thể là các tệp

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

loại tệp DLL không phải là một phần của vấn đề thực tế.

Trong trường hợp của tôi, việc đăng ký ba tệp OCX bị thiếu và sau đó mọi thứ đều ổn, công cụ BUT Dependency Walker vẫn liệt kê tất cả các tệp DLL giống như trước đây ngay cả khi chương trình chỉ chạy tốt.

Ý chính của nó: Như một người khác đã nói, công cụ này có một chút ngày nay và không phải lúc nào cũng hoạt động đúng với một hệ điều hành mới hơn. Do đó, hãy chú ý và đừng hiểu lầm bằng cách bỏ lỡ 'API-MS-WIN-CORE-COM-L1-1-0.DLL', ... vấn đề có lẽ nằm hoàn toàn ở nơi khác.


1
DirectCysis không có sẵn trên Windows 7 theo như tôi biết (DCOMP.DLL).
Brian

156
Làm thế nào về việc mở lại này? Tìm kiếm Google của tôi đã đưa tôi đến câu hỏi này chỉ 20 giờ sau khi nó bị đóng cửa vì "không thể giúp đỡ bất kỳ du khách nào trong tương lai" ...
Christian Severin

27
bạn đã phải đăng ký 3 tệp ocx nào và quan trọng hơn là bạn đã tìm ra nó như thế nào? Tôi đã bị mắc kẹt trong vài ngày nay
Ben Brammer

2
Này các bạn. Tôi nghĩ rằng tôi đã đóng đinh cái này (xem bên dưới), nhưng như một lưu ý phụ, bạn có thể bỏ qua việc không liên kết đến IESHIMS.DLL và GPSVC.DLL một cách an toàn. Về cơ bản, nó xuất hiện mọi thứ tôi biên dịch trong Win7 và dường như không có hậu quả nào về chức năng. Kinh nghiệm này rút ra từ khoảng hơn 30 nhị phân bây giờ. thở dài Tôi ghét-ghét-ghét làm windows dev vì những lý do như thế này.
meawoppl

3
Thay đổi nhân Windows 7 dẫn đến api-ms-win- * DLL được giải thích khá rõ ở đây nirsoft.net/articles/windows_7_kernel_arch architecture_changes.html - tôi nghĩ DependencyWalker chỉ không thể xử lý những thay đổi này - vì vậy đừng lo lắng về những thay đổi đó. Từ MS: msdn.microsoft.com/en-us/l
Library / hh802935% 28v = vs85% 29.aspx

Câu trả lời:


63

Vấn đề này liên quan đến việc thiếu "gói phân phối lại" của Visual Studio. Không rõ ràng cái nào bị thiếu dựa trên bước đi phụ thuộc, nhưng tôi sẽ thử cái tương ứng với phiên bản trình biên dịch của bạn trước và xem mọi thứ có chạy đúng không:

Phòng thu hình ảnh 2015

Visual Studio 2013

Studio hình ảnh 2010

Phòng thu hình ảnh 2008

Tôi gặp phải vấn đề này vì tôi đang sử dụng trình biên dịch Visual Studio, nhưng không phải là môi trường Visual Studio đầy đủ.


Sẽ dám tiêm một liên kết mới tại đây: Các bản tải xuống Visual C ++ được hỗ trợ mới nhất . Stein Åsmul, 29.11.2018 .



1
Ngoài ra, có vẻ như điều này có thể được gây ra bằng cách cài đặt các gói có thể phân phối lại trên một số phiên bản của Win 7. Cảm ơn m $.
meawoppl

Tôi cũng có vấn đề với điều này và tin rằng có nhiều cách để sửa nó. Trong trường hợp của tôi, tôi nhận thấy rằng việc biên dịch với cấu hình gỡ lỗi khiến com dll của tôi không đăng ký. Tuy nhiên, khi tôi thay đổi cấu hình để phát hành, tôi đã có thể đăng ký sạch. Môi trường của tôi là VS 2012. Và tôi đã sao chép các tệp redist (phiên bản x64) thích hợp vào cùng thư mục với com dll của tôi.
Jim Kennedy

NB một số SDK / DDK mới hơn cũng đi kèm với một số trong số này!
meawoppl

1
VS2015 vcredist _ *. Exe cài đặt các DLL này, nhưng các phương thức khác, như MSM được cung cấp với VS thì không. vcredist bao gồm các DLL này và bạn sẽ cần nền tảng tối thiểu cần thiết. (Lưu ý tôi phải cài đặt Windows 7 SP1 hai lần cho nó có hiệu lực - WU nói dối!) Microsoft.com/en-us/download/details.aspx?id=48234
GilesDMiddleton

19

Tôi vừa giải quyết vấn đề tương tự với C ++ Qt 5 và Windows 7 64 bit với MSCVC 2012.

Lúc đầu, tôi nghĩ rằng đó là một vấn đề về tệp MSVC / Windows DLL, nhưng như BorisP đã nói, vấn đề nằm ở sự phụ thuộc vào dự án của tôi. Chìa khóa là " Làm thế nào để biết phụ thuộc dự án của bạn trong Qt 5? ".

Vì tôi không tìm thấy bất kỳ cách rõ ràng nào để biết điều đó ( Dependency Walker đã không giúp tôi rất nhiều ...), tôi đã làm theo "thủ tục ngược" tiếp theo, mất không quá 5 phút và tránh được nhiều cơn đau đầu với DLL phụ thuộc tập tin:

  1. Biên dịch dự án của bạn và đưa tệp thực thi vào một thư mục trống: myproject.exe
  2. Hãy thử thực hiện nó, Nó sẽ lấy ra một lỗi (thiếu các tệp DLL ...).
  3. Bây giờ, sao chép tất cả các tệp DLL từ Qt (trong trường hợp của tôi, chúng nằm trong C: \ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012_64_opengl \ bin) vào thư mục này.
  4. Hãy thử thực hiện lại, nó có thể sẽ hoạt động tốt.
  5. Bắt đầu xóa dần dần và thử mỗi khi tệp thực thi của bạn vẫn hoạt động, cố gắng để lại các tệp DLL tối thiểu cần thiết.

Khi bạn có tất cả các tệp DLL trong cùng một thư mục, sẽ dễ dàng tìm thấy tệp nào không hợp lệ (XML, WebKit, ... bất cứ điều gì ..) và do đó phương pháp này không mất hơn năm phút.


Nếu các DLL bị thiếu là các hội đồng GAC, phương pháp này sẽ giúp bạn xác định các DLL nào bị thiếu (các thông báo lỗi sẽ cho bạn biết nó không thể tải tập hợp nào), và sau đó bạn sẽ phải tìm ra bộ công cụ hoặc khung nào để cài đặt máy để đưa chúng vào GAC (hoặc bao gồm phân phối của bạn).
RCabr

2
điều này sẽ chỉ hoạt động cho các phụ thuộc dll trực tiếp được tải khi khởi động. nếu chương trình hoặc dll của bạn sẽ tải một số dll bị trì hoãn hoặc tự động, bạn không thể tìm thấy chúng theo cách tiếp cận của bạn.
A. Binzxxxxxx

NB cũng làm theo cách này làm cho ứng dụng của bạn nhạy cảm với thứ tự của biến PATH, tải các phiên bản hệ thống trong một số trường hợp và phiên bản trong các thư mục cục bộ trong các thư mục khác. M $ gọi đây là vấn đề bảo mật, nhưng thật ra, đó là lỗi của họ khi sử dụng CWD trong các tải: support.microsoft.com/en-us/kb/2389418
meawoppl

3
Điều đó không nên được thực hiện bằng tay. Có windeployqtcông cụ cho việc đó, xem ví dụ stackoverflow.com/a/33292008/4023446
Orest Hera

1
@OrestHera windeployqtthường sao chép các tập tin không cần thiết.

16

Tôi chỉ giải quyết vấn đề tương tự.

Sự phụ thuộc Walker là sai lệch trong trường hợp này và khiến tôi mất thời gian. Vì vậy, danh sách các tệp DLL "bị thiếu" từ bài đăng đầu tiên không hữu ích và có lẽ bạn có thể bỏ qua nó.

Giải pháp là tìm tham chiếu nào mà dự án của bạn đang gọi và kiểm tra xem chúng có thực sự được cài đặt trên máy chủ không.

@Ben Brammer, không quan trọng là ba tệp .ocx nào bị thiếu, vì chúng chỉ thiếu cho dự án của Leo T Abraham. Dự án của bạn có thể gọi các tệp DLL khác.

Trong trường hợp của tôi, nó không phải là ba tệp .ocx, nhưng thiếu tệp DLL trình kết nối MySQL. Sau khi cài đặt MySQL Connector cho .NET trên máy chủ, sự cố đã biến mất.

Vì vậy, trong ngắn hạn, giải pháp là: kiểm tra xem tất cả các tài liệu tham khảo dự án của bạn có ở đó không.


12

Như đã đề cập, DCOMP là một phần của phân phối lại VC ++ (thực hiện thời gian chạy OpenMP) và là thành phần thực sự duy nhất bị thiếu. Tất cả phần còn lại là báo cáo sai.

Cụ thể API-MS-WIN-XXXX.DLL là các bộ API - về cơ bản, một mức độ bổ sung cuộc gọi được giới thiệu dần dần kể từ Windows 7. Dependency Walker Sự phát triển của dường như bị dừng lại rất lâu trước đó và nó không thể xử lý các bộ API chính xác.

Vì vậy, không có gì phải lo lắng về điều đó. Bạn không thiếu thứ gì nữa.

Một cách khác tốt hơn để tìm các tệp DLL thực sự cần thiết bị thiếu (nếu đó thực sự là vấn đề) là chạy Process Monitor và lùi lại sau thất bại, tìm kiếm chuỗi các đầu dò thất bại cho một tệp DLL cụ thể trong tất cả đường dẫn hệ thống.


+1 Đối với ProcessMonitor. Đây là bản tải xuống miễn phí từ Microsoft. Đính kèm với quy trình MATLAB và bạn có thể thấy mọi thứ đang diễn ra, bao gồm cả tải dll
Janus

6

Tôi cũng gặp phải vấn đề này, nhưng giải pháp dường như là một chủ đề phổ biến ở đây, và tôi thấy ở nơi khác trên web, là "[re] cài đặt gói có thể phân phối lại". Tuy nhiên, đối với tôi điều đó không hoạt động, vì vấn đề nảy sinh khi chạy trình cài đặt cho sản phẩm của chúng tôi (cài đặt gói có thể phân phối lại) để kiểm tra các bản dựng Visual Studio 2015 sáng bóng của chúng tôi.

Vấn đề xuất hiện do các tệp DLL được liệt kê không nằm trong đường dẫn cài đặt Visual Studio (ví dụ: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ VC \ redist) và do đó chưa được thêm vào cài đặt. Các api-ms-win- * dll này sẽ được cài đặt vào đường dẫn cài đặt SDK của Windows 10 như một phần của bản cài đặt Visual Studio 2015 (ví dụ: C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist).

Cài đặt trên Windows 10 hoạt động tốt, nhưng cài đặt trên Windows 7 yêu cầu thêm các tệp DLL này vào cài đặt sản phẩm của chúng tôi. Để biết thêm thông tin, hãy xem Cập nhật cho Universal C Runtime trong Windows mô tả việc bổ sung các phụ thuộc này do Visual Studio 2015 gây ra và cung cấp các bản tải xuống cho các nền tảng Windows khác nhau; cũng xem Giới thiệu CRT phổ quát mô tả thiết kế lại các thư viện CRT. Quan tâm đặc biệt là mục 6 trong phần có tiêu đề Phần mềm phân phối sử dụng CRT phổ quát :

Cập nhật ngày 11 tháng 9 năm 2015: Hỗ trợ triển khai ứng dụng cục bộ của CRT toàn cầu. Để có được các tệp nhị phân để triển khai ứng dụng cục bộ, hãy cài đặt Bộ công cụ phát triển phần mềm Windows (SDK) cho Windows 10. Các tệp nhị phân sẽ được cài đặt vào C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist \ ucrt. Bạn sẽ cần sao chép tất cả các DLL với ứng dụng của mình (lưu ý rằng bộ tệp DLL là cần thiết là khác nhau trên các phiên bản Windows khác nhau, vì vậy bạn phải bao gồm tất cả các tệp DLL để chương trình của bạn chạy trên tất cả các phiên bản được hỗ trợ của Windows).


5

Đóng góp này không thực sự trả lời câu hỏi ban đầu, nhưng có tính đến tỷ lệ trúng của chủ đề này, tôi cho rằng có khá nhiều người giải quyết vấn đề mà các thư viện API-MS-WIN-CORE- có thể được tìm thấy.

Tôi đã có thể giải quyết vấn đề trong đó ứng dụng của tôi đã từ chối bắt đầu với thông báo lỗi rằng API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL không được tìm thấy bằng cách cập nhật Visual Studio.

Tôi không nghĩ rằng môi trường xây dựng của tôi (Windows 7 Pro SP1, Visual Studio Ultimate 2012) đã bị rối tung hoàn toàn, nó hoạt động tốt cho hầu hết các dự án của tôi. Nhưng trong một số trường hợp rất cụ thể, tôi đã nhận được thông báo lỗi (xem bên dưới).

Sau khi cập nhật Visual Studio 11 từ Phiên bản CD ban đầu (tôi đã quên tra cứu số phiên bản) thành phiên bản 11.0.61030.00 Bản cập nhật 4 cũng là dự án bị hỏng đang chạy lại.

Thông báo lỗi khi khởi động ứng dụng


Liên kết bị hỏng (hiệu quả) ( "Chúng tôi xin lỗi, bản tải xuống này không còn khả dụng nữa." ).
Peter Mortensen

@PeterMortensen Tôi tìm thấy liên kết này đến Cập nhật 5 , nhưng không biết liệu cách giải quyết được đề xuất vẫn áp dụng. Cập nhật 4 không còn có sẵn. Dưới đây là danh sách các bản cập nhật cho VS2012 . Ngày kết thúc sản phẩm được báo cáo là 10/2023.
Normanius

3

Điều này đã giải quyết vấn đề cho tôi:

Gỡ cài đặt gói phân phối lại Visual Studio 2010 nếu bạn đã cài đặt nó, sau đó cài đặt Microsoft Windows 7 SDK .


1
Các ghi chú cài đặt đề nghị bạn gỡ cài đặt các gói phân phối lại vì chúng chứa các phiên bản dự phòng của DLL ở trên và sẽ gây nhầm lẫn liên kết động cho mã và các hình thức khác của Win7 herp-derp. Tại sao nó không làm điều này cho bạn trong quá trình cài đặt, chúng tôi có thể gửi tệp một cách an toàn dưới dạng #iwishihadarealpackagemanager.
meawoppl

1
làm việc cho tôi quá đã dành quá nhiều giờ cho nó, cài đặt .net directx, nhưng cài đặt lại msvc ++ đã hoạt động
NoWomenNoCry

2

Tôi giải quyết vấn đề. Khi tôi đăng ký các tệp OCX, tôi đã chạy nó với Cửa sổ lệnh đã được thực thi với tư cách quản trị viên.


1

Đối với bất kỳ ai đến đây, nhưng gặp vấn đề về Photoshop : giải pháp của tôi là gỡ cài đặt MS VC ++ có thể phân phối lại x86 và 64 đầu tiên. Sau đó cài đặt một phiên bản phù hợp với phiên bản và kiến ​​trúc Windows (86 hoặc 64).


0

Cài đặt SQL Server Management Studio 2014 trên Windows 7 mới cài đặt đã giải quyết vấn đề này tại máy khách của chúng tôi sau cuộc chiến vô lý kéo dài hai ngày.


3
nhiều câu trả lời khác tồn tại, và có lẽ sẽ là một nhận xét tốt nhất
Paul Bastide

0

Tôi đã từng gặp vấn đề tương tự. Sau khi dành hàng giờ để tìm kiếm trên web, tôi tìm thấy một giải pháp cho tôi.

Tôi đã sao chép tệp combase.dll (C: \ Windows \ System32) vào thư mục phát hành và nó đã giải quyết được vấn đề.


2
Cài đặt dll ngẫu nhiên trên đường dẫn của bạn là BAD IDEA.
meawoppl

0

Tôi đến đây với sự cố này xảy ra, sau khi thử cài đặt Windows 7 OEM mới, nâng cấp lên Windows 10.

Sau một số tìm kiếm trên các diễn đàn của Microsoft và như vậy tôi đã tìm thấy giải pháp sau đây phù hợp với mình:

Thay thế C:\Windows10Upgrade\wimgapi.dllbằng một từC:\Windows\System32\wimgapi.dll


Cài đặt dll ngẫu nhiên trên đường dẫn của bạn là BAD IDEA.
meawoppl

Tất nhiên là vậy, nhưng khi nó là một bản cài đặt hoàn toàn mới, có gì để phá vỡ? : D
djsmiley2kStaysInside

0

Tôi cũng đề nghị kiểm tra dung lượng bộ nhớ hiện đang được sử dụng.

Hóa ra việc không thể tìm thấy các tệp DLL này là triệu chứng đầu tiên được thể hiện khi cố gắng chạy một chương trình (chạy hoặc gỡ lỗi) trong Visual Studio.

Sau hơn nửa giờ với nhiều lần gãi đầu, tìm kiếm trên web, chạy Trình giám sát quy trìnhTrình quản lý tác vụ , và phụ thuộc, một chương trình hoàn toàn khác đã chạy từ đầu thời gian đã báo cáo rằng "bộ nhớ thấp; hãy thử dừng một số chương trình" hoặc một số như vậy. Sau khi giết Firefox, Thunderbird, Process Monitor và phụ thuộc, mọi thứ lại hoạt động trở lại.


0

Chỉ cần xác nhận câu trả lời ở đây, giải pháp của tôi là sao chép tệp DLL không tải VÀ tệp ocx đi kèm với thư mục system32, đã giải quyết vấn đề của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.