Python не может открыть msvcr90.dll

Мое приложение для Windows встраивает Python 2.6 (я знаю, что оно старое, но это то, с чем мы должны работать). Он может выполнять основные команды Python, но не может выполнить

import ctypes
ctypes.WinDLL("msvcr90.dll")

Я получаю ошибку 126 "не могу найти DLL". Если я устанавливаю библиотеку DLL там, где ее может найти приложение, я получаю сообщение об ошибке 1114 "Ошибка инициализации DLL".

ОБНОВЛЕНО Это можно воспроизвести с помощью этой простейшей программы:

#include <math.h>
#include <iostream>
#undef _DEBUG
#include <Python.h>

int main(int argc, char* argv[])
{
    Py_SetProgramName(argv[0]);
    Py_Initialize();
    PyRun_SimpleString("import pyreadline\n");
    Py_Finalize();
    std::cout << "Press enter: " << std::endl;
    char c;
    std::cin.read(&c, 1);
    return 0;
}

Это не удается при компиляции с использованием набора инструментов V9 или v10 в архитектурах x86 и amd64.

Трассировка выглядит следующим образом:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Python26-x86\lib\site-packages\pyreadline\__init__.py", line 9, in <m
odule>
    import unicode_helper, logger, clipboard, lineeditor, modes, console
  File "C:\Python26-x86\lib\site-packages\pyreadline\console\__init__.py", line
14, in <module>
    from console import *
  File "C:\Python26-x86\lib\site-packages\pyreadline\console\console.py", line 6
05, in <module>
    msvcrt = cdll.LoadLibrary(ctypes.util.find_msvcrt())
  File "C:\Python26-x86\Lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python26-x86\Lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found    
  -- or alternatively --
WindowsError: [Error 1114] A dynamic link library (DLL) initialization routine f
ailed

Я знаю, что загружаемая DLL является msvcr90.dll, потому что я вставил print self._name в ctypes.py,

Приложение запускает большинство скриптов Python, которые мне нужны, кроме тех, которые загружают pyreadline,

Эти же сценарии запускаются из установленного исполняемого файла Python без проблем.

Что может быть причиной этого?

ОБНОВЛЕНО 2 Простой LoadLibrary("msvcr90.dll") тоже не удается Я добавил DLL в манифест приложения, как рекомендовано в различных местах в сети. Это не помогло. Вот манифест, встроенный в исполняемый файл:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Этот манифест и манифест, встроенный в python.exe, совпадают, но python.exe может открыть DLL, а мое приложение - нет. Я озадачен

2 ответа

Решение

Обновлено!
Проблема возникает из-за того, что система пытается загрузить msvcr90.dll из разных источников. Сначала при запуске приложения, затем запускается скрипт на python.
Чтобы решить эту проблему, вы должны поместить в приложение правильный файл манифеста.
Я создал файл добавленного.manifest в корне проекта с этим содержанием:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" ></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

Чем я установил этот файл в свойствах проекта / Инструмент манифеста / Ввод и вывод / Дополнительные файлы манифеста
У вас есть ошибка в вашем манифесте в processorArchitecture = "amd64".
Проект работает нормально после восстановления.

Я решил ту же ошибку в Windows 10 для другого приложения Python, переустановив python 2.7.

Другие вопросы по тегам