使用Py2exe拒绝访问

时间:2014-02-18 08:30:48

标签: python windows-services py2exe

我正在使用Py2exe将可执行文件创建为Windows服务。

当我运行脚本时,我收到此错误:

  

文件“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(ensure_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"
        },
        },
    )

问题仅发生在构建计算机上,它在我的开发计算机上运行良好。

我尝试将完全控制设置为工作文件夹中的每个人,但它不起作用。

有什么想法吗?

谢谢。

4 个答案:

答案 0 :(得分:37)

经过两天的调查,我们在IT人员的帮助下找到了解决方案。

当py2exe尝试修改添加元数据和\或图标的可执行文件时,会出现此问题。

根本原因?简单...... ANTIVIRUS。

它认为操作是威胁并导致访问被拒绝错误。

谢谢大家!

答案 1 :(得分:2)

问题可能是防病毒程序阻止了对.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(...)

答案 2 :(得分:1)

我发现断开与Internet的连接足以解决问题(尽管这可能与禁用所提出的防病毒解决方案有关)。

答案 3 :(得分:0)

另一个可能的解决方案是你已经有一个包含文件的dist文件夹 - 我做了(忘了我已经运行了py2exe)。删除了该文件夹,它再次起作用