Доступ запрещен с использованием Py2exe
Я использую Py2exe для создания исполняемого файла в качестве службы Windows.
Когда я запускаю script, я получаю эту ошибку:
Файл "C:\TeamCity\buildAgent\work\582d895bd5b431ac\winpython\WinPython-32bit-2.7.3.3\python-2.7.3\lib\site-packages\py2exe\build_exe.py", строка 860, в build_executable add_resource (security_unicode (exe_path), script_bytes, u "PYTHONSCRIPT", 1, True) RuntimeError: EndUpdateResource: доступ запрещен.
Это вызов py2exe:
setup(
name = NAME,
description = DESCRIPTION,
version = '1.0.133.43',
service = [{'modules':["ServiceLauncher"], 'cmdline':'pywin32'}],
zipfile=None,
options = {
"py2exe":{"packages":"encodings",
"includes":"win32com,win32service,win32serviceutil,win32event",
"excludes":"libiomp5md.dll"
},
},
)
Проблема возникает только на машине сборки, она отлично работает на моем компьютере.
Я попытался установить полный контроль для всех в рабочей папке, но он не работает.
Любая идея?
Спасибо.
Ответы
Ответ 1
После двухдневного расследования мы нашли решение с помощью ИТ-персонала.
Проблема возникает, когда py2exe пытается изменить исполняемые метаданные добавления и\или значок.
Основная причина? Простой... АНТИВИРУС.
Он считает, что операция вызывает угрозу и вызывает ошибку Access Denied.
Спасибо всем!
Ответ 2
Я обнаружил, что отключение от Интернета было достаточно для решения проблемы (хотя это, вероятно, связано с отключением предлагаемого антивирусного решения).
Ответ 3
другое возможное решение состоит в том, что у вас уже есть папка dist с файлами в нем - я сделал (забыл, что я уже запускал py2exe). удалил папку, и она снова работала
Ответ 4
Вероятно, проблема заключается в том, что антивирусная программа блокирует доступ на запись к файлам .exe, как отмечали другие. Если вы не можете или не хотите отключать антивирус, следующий патч в начале вашего файла setup.py
переименует файл, чтобы избежать расширения .exe
до изменения и переименовать его после.
import py2exe.py2exe_util
from py2exe.py2exe_util import add_resource
import os
def add_resource_patch(name, *arg, **kwarg):
name_tmp = name + '.tmp'
os.rename(name, name_tmp)
add_resource(name_tmp, *arg, **kwarg)
os.rename(name_tmp, name)
py2exe.py2exe_util.add_resource = add_resource_patch
from distutils.core import setup
import py2exe
setup(...)