Windows 7, 64 бит, проблемы с DLL

У меня проблема с нашим исполняемым файлом. Я использую этот C++ 32-разрядный исполняемый файл на моей 64-разрядной версии Windows 7, в которой также есть все эти приложения Microsoft (Visual Studio 2008 + 2010, TFS, SDK, Microsoft Office)... И все еще работает нормально.

Теперь я получил клиентскую установку той же самой программы, и меня попросили проверить ее с чистой установкой Windows 7. Таким образом, я получил 64-разрядную версию VMware для Windows 7 и обновил ее до Windows 7 с пакетом обновления 1 (та же версия, которую настраивает мой разработчик). Но в то время как на моем компьютере разработчика все в порядке, программа не работает с устройством VMware (30-дневная пробная версия).

Xa Dependency Walker сообщает, что отсутствуют следующие DLL файлы:

  • API-МС-WIN-ОСНОВНОЙ-COM-L1-1-0.DLL
  • API-МС-WIN-ОСНОВНОЙ-WinRT-ОШИБКА-L1-1-0.DLL
  • API-МС-WIN-ОСНОВНОЙ-WinRT-L1-1-0.DLL
  • API-МС-WIN-ОСНОВНОЙ-WinRT-ROBUFFER-L1-1-0.DLL
  • API-МС-WIN-ОСНОВНОЙ-WinRT-СТРОКА-L1-1-0.DLL
  • API-МС-WIN-SHCORE-ШКАЛИРОВАНИЕ-L1-1-0.DLL
  • DCOMP.DLL
  • GPSVC.DLL
  • ieshims.dll

Я погуглил эти DLL файлы API-MS-WIN -... и обнаружил, что они уже должны быть частью Windows 7 (хотя некоторые сайты утверждают, что они принадлежат Windows 8 и Windows Server 2012).

Я уже попробовал предложенные исправления, которые я нашел:

  • работает 'sfc/scannow'
  • установка исполняемых файлов среды выполнения Visual Studio 2008 SP1

Но это ничего не решило. :-(

Примечание: у моей коробки разработки их тоже нет, и, похоже, они не нужны. Например, user32.dll на моем компьютере не связывается с одним из них, в то время как установка на VMware делает.

Есть идеи, как решить эту проблему? Я пытался найти подходящую загрузку/исправление на страницах Microsoft, но мне не удалось.


После решения моей проблемы я хотел сообщить о том, что узнал, и не могу опубликовать это как ответ, потому что вопрос закрыт.

На самом деле все DLL файлы, которые были обнаружены пропавшими без вести с помощью инструмента Dependency Walker, а именно

* API-MS-WIN-CORE-...
DLL файлы типа

не были частью реальной проблемы.

В моем случае регистрация трех файлов OCX отсутствовала, и после этого все было просто отлично, но НОУ Dependency Walker по-прежнему перечислял все те же самые DLL файлы, что и раньше, даже когда программа сейчас работала нормально.

Суть этого: как кто-то еще сказал, инструмент немного устарел и не всегда работает должным образом с более новой ОС. Поэтому следите за тем, чтобы не вводить в заблуждение, пропуская "API-MS-WIN-CORE-COM-L1-1-0.DLL",... проблема, вероятно, кроется совсем в другом месте.

Ответ 1

Эта проблема связана с отсутствием в Visual Studio "распространяемого пакета". Неясно, какой из них отсутствует в зависимости от обхода зависимостей, но я бы сначала попробовал тот, который соответствует версии вашего компилятора, и посмотрю, все ли работает правильно:

Visual Studio 2015

Visual Studio 2013

Visual Studio 2010

Visual Studio 2008

Я столкнулся с этой проблемой, потому что я использую компиляторы Visual Studio, но не всю среду Visual Studio.


Собираюсь добавить новую ссылку здесь: Последние поддерживаемые загрузки Visual C++. Штейн Осмул, 29.11.2018.

Ответ 2

Я только что решил ту же проблему с C++ Qt 5 и Windows 7 64 бит с MSCVC 2012.

Сначала я думал, что это проблема с файлом DLL MSVC/Windows, но, как сказал Борис, проблема была в зависимости моего проекта. Ключ Как узнать зависимости вашего проекта в Qt 5?".

Поскольку я не нашел четкого способа узнать это (Dependency Walker мне не очень помог...), я следовал следующей "обратной процедуре", которая занимает не более 5 минут и избегаю много головных болей с зависимостями файла DLL:

  1. Скомпилируйте ваш проект и поместите исполняемый файл в пустую папку: myproject.exe
  2. Попытайтесь выполнить его, он получит сообщение об ошибке (отсутствуют файлы DLL...).
  3. Теперь скопируйте все файлы DLL из Qt (в моем случае они были в C:\Qt\Qt5.1.1\5.1.1\msvc2012_64_opengl\bin) в эту папку.
  4. Попробуйте выполнить снова, вероятно, он будет работать нормально.
  5. Начните постепенно удалять и пробуйте каждый раз, когда ваш исполняемый файл все еще работает, стараясь оставить минимум необходимых DLL файлов.

Когда все файлы DLL находятся в одной папке, легче определить, какие из них недопустимы (XML, WebKit и т.д.), И, следовательно, этот метод занимает не более пяти минут.

Ответ 3

Я только что решил ту же проблему.

Зависимость Уокер в этом случае вводит в заблуждение и заставляет меня терять время. Таким образом, список "отсутствующих" DLL файлов из первого поста бесполезен, и вы, вероятно, можете его игнорировать.

Решение состоит в том, чтобы найти ссылки, которые вызывает ваш проект, и проверить, действительно ли они установлены на сервере.

@Ben Brammer, не важно, какие три файла .ocx отсутствуют, потому что они отсутствуют только для проекта Leo T Abraham. Ваш проект, вероятно, вызывает другие файлы DLL.

В моем случае это были не три файла .ocx, а отсутствующий файл DLL коннектора MySQL. После установки MySQL, Connector для .NET на сервер, проблема исчезла.

Итак, вкратце, решение таково: проверьте, все ли ссылки на ваши проекты есть.

Ответ 4

Как уже упоминалось, DCOMP является частью распространяемых VC++ (реализующих среду выполнения OpenMP) и является единственным действительно отсутствующим компонентом. Все остальные являются ложными сообщениями.

В частности, API-MS-WIN-XXXX.DLL - это наборы API - , по сути, дополнительный уровень перенаправления вызовов постепенно вводится со времени выхода Windows 7. Разработка Dependency Walker, казалось бы, была приостановлена задолго до этого, и он не может правильно обрабатывать наборы API.

Так что не о чем беспокоиться. Вы не пропустите ничего больше.

Лучшей альтернативой для поиска действительно необходимых DLL файлов, которые отсутствуют (если это действительно проблема), является запуск Process Monitor и откат назад от ошибки, ища последовательности сбойных зондов для конкретного DLL файла. во всем системном пути.

Ответ 5

Я также столкнулся с этой проблемой, но решение, которое, как мне кажется, является здесь общим потоком, и которое я видел в других местах в Интернете, заключается в "[переустановке] распространяемого пакета". Однако для меня это не работает, так как проблема возникла при запуске установщика для нашего продукта (который устанавливает распространяемый пакет) для тестирования наших новых блестящих сборок Visual Studio 2015.

Проблема возникла из-за того, что перечисленные DLL файлы не находятся в пути установки Visual Studio (например, C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\redist) и, следовательно, не были добавлены в установку. Эти api-ms-win- * dll устанавливаются в путь установки Windows 10 SDK как часть установки Visual Studio 2015 (например, C:\Program Files (x86)\Windows Kits\10\Redist).

Установка в Windows 10 работала нормально, но установка в Windows 7 требовала добавления этих файлов DLL в нашу установку продукта. Дополнительные сведения см. в разделе Обновление для среды выполнения Universal C в Windows, в котором описывается добавление этих зависимостей, вызванных Visual Studio 2015, и предоставляются загрузки для различных платформ Windows; также см. Введение в универсальный CRT, в котором описывается редизайн библиотек CRT. Особый интерес представляет пункт 6 в разделе " Распространение программного обеспечения, в котором используется универсальный ЭЛТ":

Обновлено 11 сентября 2015 г. Поддерживается локальное развертывание универсального CRT на уровне приложений. Чтобы получить двоичные файлы для локального развертывания приложения, установите Windows Software Development Kit (SDK) для Windows 10. Двоичные файлы будут установлены в C:\Program Files (x86)\Windows Kits\10\Redist\ucrt. Вам нужно будет скопировать все библиотеки DLL с вашим приложением (обратите внимание, что набор файлов DLL необходим для разных версий Windows различен, поэтому вы должны включить все файлы DLL, чтобы ваша программа работала на всех поддерживаемых версиях Windows).

Ответ 6

Этот вклад на самом деле не отвечает на первоначальный вопрос, но, принимая во внимание частоту появления этого потока, я предполагаю, что довольно много людей имеют дело с проблемой, что библиотеки API-MS-WIN-CORE-не могут быть найдены.

Мне удалось решить проблему, когда мое приложение отказалось запускаться с сообщением об ошибке, что API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL не найден, путем простого обновления Visual Studio.

Я не думаю, что моя среда сборки (Windows 7 Pro SP1, Visual Studio Ultimate 2012) была полностью испорчена, она работала нормально для большинства моих проектов. Но при некоторых особых обстоятельствах я получил сообщение об ошибке (см. ниже).

После обновления Visual Studio 11 с исходной CD-версии (я забыл посмотреть номер версии) до версии 11.0.61030.00 с обновлением 4 также снова был запущен поврежденный проект.

Error message at application startup

Ответ 7

Это решило проблему для меня:

Удалите распространяемый пакет Visual Studio 2010, если он уже установлен, а затем установите Microsoft Windows 7 SDK.

Ответ 8

Я решил проблему. Когда я зарегистрировал файлы OCX, я запустил его с помощью командного окна, которое было выполнено как администратор.

Ответ 9

Установка SQL Server Management Studio 2014 на недавно установленную Windows 7 решила эту проблему на нашем клиенте после двухдневной нелепой битвы.

Ответ 10

У меня такая же проблема. Потратив часы на поиск в Интернете, я нашел решение для себя.

Я скопировал файл combase.dll(C:\Windows\System32) в папку релиза, и это решило проблему.

Ответ 11

Для всех, кто пришел сюда, но с проблемой Photoshop: я решил удалить распространяемый MS VC++ сначала x86 и 64 оба. Затем установите версию, соответствующую версии и архитектуре Windows (86 или 64).

Ответ 12

Я пришел сюда с этой проблемой, после попытки новой установки Windows 7 OEM, обновления до Windows 10.

После некоторых поисков на форумах Microsoft и таких, я нашел следующее решение, которое работало для меня:

Замените C:\Windows10Upgrade\wimgapi.dll на тот, что из C:\Windows\System32\wimgapi.dll

Ответ 13

Я предлагаю также проверить, сколько памяти используется в настоящее время.

Оказывается, невозможность найти эти DLL файлы была первым симптомом, проявленным при попытке запустить программу (либо запустить, либо отладить) в Visual Studio.

После более чем получаса с большим количеством царапин на голове, поиском в Интернете, запуском Process Monitor и Task Manager и, в зависимости от этого, совершенно другой программой, которая запускалась с начала времен сообщил, что "недостаточно памяти; попробуйте остановить некоторые программы" или некоторые другие. После убийства Firefox, Thunderbird, Process Monitor и других, все снова заработало.