2014-02-18 8 views
11

Я использую Py2exe для создания исполняемого файла в качестве службы Windows.Доступ запрещен с использованием Py2exe

Когда я запускаю сценарий, я получаю эту ошибку:

File "C:\TeamCity\buildAgent\work\582d895bd5b431ac\winpython\WinPython-32bit-2.7.3.3\python-2.7.3\lib\site-packages\py2exe\build_exe.py", line 860, in build_executable add_resource(ensure_unicode(exe_path), script_bytes, u"PYTHONSCRIPT", 1, True) RuntimeError: EndUpdateResource: Access is denied.

Это призыв к 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" 
     }, 
     }, 
    ) 

Проблема возникает только на машине построения, он прекрасно работает на моем разработчика ПК.

Я попытался установить полный доступ для всех в рабочей папке, но это не сработает.

Любая идея?

спасибо.

+0

Из любопытства попробуйте более короткое имя пути, если это возможно. В Windows могут возникнуть странные ошибки, когда путь длинный в Windows. – Torxed

+0

Ошибка может быть не в доступе к определенному файлу в файловой системе, а к какой-либо другой функции, такой как раздел реестра или параметр диспетчера служб (поскольку я замечаю, что вы используете 'ServiceLauncher',' win32service' и т. Д. ...) , Вы работаете как администратор? – abarnert

+0

Я работаю как администратор. Я пробовал более короткий путь без везения ... –

ответ

35

После двухдневного расследования мы нашли решение с помощью ИТ-персонала.

Проблема возникает, когда py2exe пытается изменить исполняемый файл, добавляя метаданные и \ или значок.

Основная причина? Простой ... АНТИВИРУС.

Он считает, что операция представляет угрозу и вызывает ошибку Access Denied.

Спасибо всем!

+0

Спасибо, что ответили на это. У меня была одна и та же проблема, она попала в нее, наткнулась на этот ответ, отключил антивирус, ударил снова, и все было хорошо. Общее время простоя: 1 мин. Наверное, спас мне часы! – jozzas

+3

В случае, если вы не можете отключить антивирус, может помочь запуск процесса сборки (py2exe). Это сработало для меня, потому что в первый раз он создал library.zip и провалился.Во второй раз он смог создать исполняемый файл. – syam

+0

@syam Спасибо, что упомянул об этом =) –

1

Я обнаружил, что отключения от Интернета было достаточно, чтобы решить проблему (хотя это, вероятно, связано с отключением предлагаемого антивирусного решения).

0

Еще одно возможное решение заключается в том, что у вас уже есть папка dist с файлами в нем - я сделал (забыл, что я уже запускал py2exe). удалил папку, и она снова работала

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Обзор] (/ review/low-quality-posts/11012129) –

+0

@FabioLamanna У меня возникла аналогичная проблема с автором, и это решение, которое сработало для меня. для других, которые могут оказаться в моей обуви, это хороший ресурс, если они попадут на этот пост. – Jona

0

Проблема, скорее всего, является антивирусной программой, которая блокирует доступ на запись в .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(...) 
Смежные вопросы