VCRUNTIME140.DLL не добавляется при использовании cx_freeze в Python - PullRequest
1 голос
/ 09 марта 2020

Я очень новичок в Python. Я только что написал программу, чтобы проверить, когда серверы перезагружались в последний раз, и отправить электронное письмо нашей команде. У нас более 30 серверов, и на каждом из них невозможно установить python. Поэтому я использовал cx_freeze для создания исполняемого файла. Ниже приведен мой файл setup.py.

from cx_Freeze import setup, Executable

setup(
    name = "RebootChecker",
    version = "1.0",
    description = "A Script to check the last reboot time of servers",
    options = {
        "build_exe": {              
            "include_msvcr": True,
            "add_to_path": True,
        }
    },
    executables = [Executable("RebootTester.py", base = "Win32GUI")]
)

exe-файл запускает файл на моем компьютере, но при попытке его на сервере он не работает. Вылетает с ошибкой - "Программа не может запуститься, поскольку VCRUNTIME.DLL отсутствует на вашем компьютере" , даже если библиотека DLL доступна в C: \ Windows \ System32. Я обнаружил, что DLL отсутствует в папке сборки исполняемого файла python. Поэтому я вручную скопировал DLL в папку, в которой находится исполняемый файл, но я получил ошибку - Приложение не удалось правильно запустить (0xc000007b). Нажмите кнопку ОК, чтобы закрыть приложение

Я также попытался добавить файл DLL, изменив build_exe, добавив приведенные ниже строки в файл setup.py, но получил ту же ошибку, что и выше.

python_dir = os.path.dirname(sys.executable)
"include_files": [os.path.join(python_dir, "vcruntime140.dll")]

Я даже пытался восстановить приложение «Microsoft C ++ Redistributable», но безрезультатно.

Я видел в посте github, что это известная проблема в cx_freeze версии 5.0.2, где Visual Studio пакеты не добавляются даже после добавления "include_msvcr": True, но я использую версию 6.1.

В других ответах по SO приведены только перечисленные методы в качестве решений, и они не работают для меня.

Как мне заставить это работать? Я был на этом в течение нескольких часов. Любая помощь по этому вопросу приветствуется.

Спасибо!

1 Ответ

2 голосов
/ 09 марта 2020

Кажется, ваша настоящая проблема в том, что 32-битный Python работает на этой машине под 64-битным Windows. Я предполагаю, что распространяемый Microsoft C ++, который вы установили, тоже был 64-битным.

  • Файл vcruntime140.dll не может быть найден, потому что его 32-битная версия (которая должна быть в C:\Windows\SysWOW64), вероятно, не не существует.
  • При копировании файла вручную из C:\Windows\System32 (который тогда был бы 64-битной версией!), происходит сбой с 0xc000007b, который является кодом для STATUS_INVALID_IMAGE_FORMAT, потому что теперь 32- бит python.exe пытается загрузить 64-битный vcruntime140.dll.

Я бы предложил вместо этого использовать 64-битный Python на 64-битном компьютере.

...