Доступ запрещен с использованием 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(...)